### 初学 Django 时碰到的一个需求,因为公司中很多员工在修改密码之后,有一些关联的客户端或网页中的旧密码没有更新,导致密码在尝试多次之后账号被锁,为了减少这种让人头疼的重置解锁密码的操蛋工作,自己做了一个自助修改小平台。
### 水平有限,代码写得不好,但是能用,有需要的可以直接拿去用。
#### 场景说明:
因为本公司 AD 是早期已经在用,用户的个人信息不是十分全面,例如:用户手机号。
钉钉是后来才开始使用,钉钉默认是使用手机号登录。
用户自行重置密码时如果通过手机号来进行钉钉与 AD 之间的验证就行不通了。
### 逻辑:
> 用户扫码通过之后,通过临时授权码,提取用户的 userid,再通过 userid 断用户在本企业中是否存在。如果存在,提取钉钉/企业微信用户的邮箱,通过邮箱转成账号,将账号拿到 AD 中进行比对来验证账号在 AD 中是否存在并账号状态是激活的。满足以上条件的账号就会视为可自行重置密码。
## <u>_**所能接受的账号规则**_ </u>
无论是钉钉、微信,均是通过提取用户邮箱的前缀部分来作为关联 AD 的账号,所以目前的识别逻辑就需要保证邮箱的前缀和 AD 的登录账号是一致的。
如果您的场景不是这样,请按自己的需求修改源代码适配。
### 代码提交到--新分支:
```
djaong3
```
### 提示:
```
AD必须使用SSL才能修改密码(这里被坑了N久...)
自行部署下AD的证书服务,并颁发CA证书,重启服务器生效。
具体教程百度一下,有很多。
```
### 本次升级、修复,请使用最新版:
+ 升级 Python 版本为 3.8
+ 升级 Django 到 3.2
+ 修复用户名中使用\被转义的问题
+ 重写了 dingding 模块,因为 dingding 开发者平台接口鉴权的一些变动,之前的一些接口不能再使用,本次重写。
+ 重写了 ad 模块,修改账号的一些判断逻辑。
+ 重写了用户账号的格式兼容,现在用户账号可以兼容:username、DOMAIN\username、username@abc.com 这三种格式。
+ 优化了整体的代码逻辑,去掉一些冗余重复的代码。
### 2021/05/19 -- 更新:
+ 添加了企业微信支持,修改 pwdselfservice/local_settings.py 中的 SCAN_CODE_TYPE = 'DING'或 SCAN_CODE_TYPE = 'WEWORK',区分使用哪个应用扫码验证
+ 添加 Reids 缓存 Token 支持,如果不配置 Redis 则使用 MemoryStorage 缓存到内存中
Redis 的安装和配置方法请自行百度,比较简单
> 切记 Redis 一定请配置密码,弱密码或没有密码的 Redis 如果不小心暴露到公网,极其容易导致机器被黑用来挖矿。
整体验证逻辑不变,如果需要使用其它字段关联到 AD 验证的,请自行修改代码。
## 线上环境需要的基础环境:
+ Python 3.8.9 (可自行下载源码包放到项目目录下,使用一键安装)
+ Nginx
+ Uwsgi
## 截图
![](https://www.writebug.com/myres/static/uploads/2022/1/7/ce12d87e715daaaa542f2081a40b27db.writebug)
### 钉钉
![](https://www.writebug.com/myres/static/uploads/2022/1/7/4764bd7794f989a77b1200d255c4643e.writebug)
### 微信
![](https://www.writebug.com/myres/static/uploads/2022/1/7/646f1f250c95cd0957d8c02a402647f4.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/1/7/6cf206492c04bf97fe33d86ca8c3a500.writebug)
#### 扫码成功之后:
![](https://www.writebug.com/myres/static/uploads/2022/1/7/a305d470511a726d9d12b976e437e39b.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/1/7/4cd45255e4856deeeb3c6c62ce80ece5.writebug)
## 钉钉必要条件:
#### 创建企业内部应用
* 在钉钉工作台中通过“自建应用”创建应用,选择“企业内部开发”,创建 H5 微应用或小程序,在应用首页中获取应用的:AgentId、AppKey、AppSecret。
* 应用需要权限:身份验证、消息通知、通讯录只读权限、手机号码信息、邮箱等个人信息、智能人事,范围是全部员工或自行选择
* 应用安全域名和 IP 一定要配置,否则无法返回接口数据。
参考截图配置:
![](https://www.writebug.com/myres/static/uploads/2022/1/7/36b0968c2d27b3db2056d87f7acc0a2e.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/1/7/e579c1ae555086bbb8b3860b0642d305.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/1/7/c8ae96f7688432053ef3210bde308ec9.writebug)
#### 移动接入应用--登录权限:
> 登录中开启扫码登录,配置回调域名:“[https://pwd.abc.com/callbackCheck](https://pwd.abc.com/callbackCheck)”
> 其中 pwd.abc.com 请按自己实际域名来,并记录相关的:appId、appSecret。
参考截图配置:
![](https://www.writebug.com/myres/static/uploads/2022/1/7/80c3be27e534413985a1b0121a0b4edd.writebug)
## 企业微信必要条件:
* 创建应用,记录下企业的 CorpId,应用的 ID 和 Secret。
参考截图:
![](https://www.writebug.com/myres/static/uploads/2022/1/7/bbdb499ddd2443a7cb485440f5eadfb4.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/1/7/86217d0846f979a45c6140742d0715fe.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/1/7/0ef61d56724a50e29645b148bf6f954c.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/1/7/bef13a9731ec84656459891ea1bc16d3.writebug)
## 飞书必要条件:
* 开放平台--> 创建应--> 网页开启--> 配置回调 url
> 飞书接口项目地址:[https://github.com/larksuite/feishu](https://github.com/larksuite/feishu) 感谢大佬,节省了不少时间。
## 使用脚本自动部署:
使用脚本自动快速部署,只适合 CentOS,其它发行版本的 Linux 请自行修改相关命令。
### 把整个项目目录上传到新的服务器上
#### 先修改配置文件,按自己实际的配置修改项目配置文件:
修改 conf/local_settings.py 中的参数,按自己的实际参数修改
````python
# ########## AD配置,修改为自己的
# AD主机,可以是IP或主机域名,例如可以是: abc.com或172.16.122.1
AD_HOST = r'修改成自己的'
# AD域控的DOMAIN名,例如:abc
AD_DOMAIN = r'修改成自己的'
# 用于登录AD做用户信息处理的账号,需要有修改用户账号密码或信息的权限。
# AD账号,例如:pwdadmin
AD_LOGIN_USER = r'修改成自己的'
# 密码
AD_LOGIN_USER_PWD = r'修改为自己的'
# BASE DN,账号的查找DN路径,例如:'DC=abc,DC=com',可以指定到OU之下,例如:'OU=RD,DC=abc,DC=com'。
BASE_DN = r'修改成自己的'
# 是否启用SSL,
# 注意:AD必须使用SSL才能修改密码(这里被坑了N久...),自行部署下AD的证书服务,并颁发CA证书,重启服务器生效。具体教程百度一下,有很多。
AD_USE_SSL = True
# 连接的端口,如果启用SSL默认是636,否则就是389
AD_CONN_PORT = 636
# 扫码验证的类型
# 钉钉 / 企业微信,自行修改
# 值是:DING / WEWORK
SCAN_CODE_TYPE = 'DING'
# ########## 钉钉 《如果不使用钉钉扫码,可不用配置》##########
# 钉钉接口主地址,不可修改
DING_URL = r'https://oapi.dingtalk.com'
# 钉钉企业ID <CorpId>,修改为自己的
DING_CORP_ID = '修改为自己的'
# 钉钉企业内部开发,内部H5微应用或小程序,用于读取企业内部用户信息
DING_AGENT_ID = r'修改为自己的'
DING_APP_KEY = r'修改为自己的'
DING_APP_SECRET = r'修改为自己的'
# 移动应用接入 主要为了实现通过扫码拿到用户的unionid
DING_MO_APP_ID = r'修改为自己的'
DING_MO_APP_SECRET = r'修改为自己的'
# ####### 企业微信《如果不使用企业微信扫码,可不用配置》 ##########
# 企业微信的企业ID
WEWORK_CORP_ID = r'修改为自己的'
# 应用的AgentId
WEWORK_AGENT_ID = r'修改为自己的'
# 应用的Secret
WEW
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于Python + Django 的密码自助平台项目(完整代码)基于Python + Django 的密码自助平台项目(完整代码)基于Python + Django 的密码自助平台项目(完整代码)基于Python + Django 的密码自助平台项目(完整代码)基于Python + Django 的密码自助平台项目(完整代码)
资源推荐
资源详情
资源评论
收起资源包目录
基于Python + Django 的密码自助平台项目(完整代码) (131个子文件)
login.css 10KB
dmaku.css 4KB
style.css 4KB
load.css 3KB
.gitignore 168B
index.v1.html 5KB
ding_index.v1.html 5KB
we_index.v1.html 4KB
feishu_index.v1.html 4KB
ding_index.html 4KB
resetPassword.v1.html 3KB
messages.v1.html 1KB
base.html 1KB
farvirate.ico 54KB
favicon.ico 54KB
uwsgi.ini 432B
Snipaste_2019-07-15_20-06-14.jpg 283KB
Snipaste_2019-07-15_20-05-49.jpg 230KB
unlock.jpg 15KB
icon.jpg 1KB
mima-icon.jpg 1KB
user-icon.jpg 1KB
jquery-1.8.3.min.js 91KB
alert.js 4KB
check.js 2KB
bubbly-bg.js 1KB
wwLogin-1.0.0.js 1010B
ddLogin-0.0.5.js 706B
dmaku.js 489B
LICENSE 1KB
log.log 8.53MB
README.md 14KB
README.MD 81B
微扫码11.png 868KB
111.png 380KB
115.png 374KB
112.png 369KB
116.png 352KB
113.png 343KB
114.png 318KB
h5微应用--权限管理.png 268KB
微扫码12.png 219KB
h5微应用.png 168KB
微扫码15.png 158KB
移动应用接入--登录.png 153KB
微扫码13.png 116KB
h5微应用--开发管理.png 111KB
微扫码16.png 90KB
微扫码14.png 90KB
logo.png 1KB
api_contact.py 32KB
api_drive_sheet.py 29KB
exception.py 22KB
api.py 18KB
__init__.py 17KB
dt_drive.py 17KB
api_calendar.py 15KB
api_message.py 15KB
api_callback.py 14KB
dt_callback.py 14KB
api_approval.py 14KB
api_chat.py 12KB
views.py 12KB
ad_ops.py 11KB
dt_message.py 11KB
api_drive_permission.py 11KB
api_application.py 10KB
api_meeting_room.py 10KB
internal_cache.py 10KB
dt_contact.py 9KB
utils.py 8KB
api_id.py 8KB
dt_req.py 7KB
wework_ops.py 7KB
dt_enum.py 6KB
api_app_link.py 6KB
api_pay.py 6KB
dt_code.py 5KB
settings.py 5KB
dt_approval.py 5KB
api_drive_file.py 4KB
api_oauth.py 4KB
api_drive_folder.py 4KB
api_drive_suite.py 3KB
dingding_ops.py 3KB
api_user.py 3KB
abstract_api.py 3KB
helper.py 3KB
local_settings.py 3KB
feishu_ops.py 2KB
kvstorage.py 2KB
dt_help.py 2KB
dt_meeting_room.py 2KB
api_duty.py 2KB
api_drive_doc.py 2KB
api_drive_comment.py 2KB
form.py 2KB
api_image.py 2KB
dt_pay.py 2KB
cache.py 1KB
共 131 条
- 1
- 2
资源评论
- m0_670090632024-06-04感谢资源主分享的资源解决了我当下的问题,非常有用的资源。
甜辣uu
- 粉丝: 9453
- 资源: 1102
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 排球场地的排球识别 yolov7标记
- DOTA 中的 YOLOX 损失了 KLD (定向物体检测)(Rotated BBox)基于YOLOX的旋转目标检测.zip
- caffe-yolo-9000.zip
- Android 凭证交换和更新协议 - “你只需登录一次”.zip
- 2024 年 ICONIP 展会.zip
- 微信小程序毕业设计-基于SSM的电影交流小程序【代码+论文+PPT】.zip
- 微信小程序毕业设计-基于SSM的食堂线上预约点餐小程序【代码+论文+PPT】.zip
- 锐捷交换机的堆叠,一个大问题
- 微信小程序毕业设计-基于SSM的校园失物招领小程序【代码+论文+PPT】.zip
- MATLAB《结合萨克拉门托模型和遗传算法为乐安河流域建立一个水文过程预测模型》+项目源码+文档说明
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功