Django 项目总结(2)-忘记密码

本文阅读时长大约为 3 分钟

找回密码

找回密码步骤

输入账号(用户名或手机号)与图片验证码来获取用户手机号,以便对操作人进行身份认证

发送短信验证码,完成身份认证

填写两次新密码,并提交

完成密码重置

第一步——这一步主要是判断用户的账号是否存在:

输入账号和图片验证码,发送请求到后端,以 get 方式,参数拼接在链接后面;

后端对账号进行验证,调用之前的方法,可以同时判断手机号和账号名,查看有没有当前用户;

使用序列化器对图片验证码进行验证,取出 text 和图片对应 id,从redis中进行查询出真实的图片 text,判断 text 是否过期,对传过来的 text 和真实 text 进行对比,对比前需要进行转码和转小写,判断成功返回数据;

根据 user 对象生成 access_token;

将手机号的中间四位使用正则的 sub 方法替换成 * 号,防止手机号直接暴露出去;

将修改过的手机号和生成的 token 返回给前端,token 中保存正确的手机号。

使用 itsdangerous 生成凭据 access_token,使用 TimedJSONWebSignatureSerializer 可以生成带有有效期的 token。

JWT 和 itsdangerous 生成的token区别是,JWT 生成的 token 用来保持登录状态使用,而 其他需要验证的 token 都使用由 itsdangerous 生成的

第二步——这一步主要是验证用户的手机号:

前端发送请求,带上上一步生成的 access_token;

在模型类中定义验证 token 的方法,使用 itdangerous 提供的方法进行反验证,取出存在 token 中的手机号,进行判断是否在 60s 内,防止重复发送;

生成短信验证码,存入 redis,使用异步 celery 发送短信;

返回成功消息;

第三步——返回用于设置密码的接口调用凭据 access_token:

用户收到短信并填写短信验证码;

发送请求到后端,带上 account 和 sms_code;

后端编写序列化器对参数进行校验;

生成用于修改密码的 token,将 user_id 保存进去,返回 user_id 和 token

第四步——进行密码的重置:

进入到这一步,用户的身份已经被确认,进行密码的重置即可,为了防止被别人拿着 access_token 去对别人的用户进行设置,所以也需要对 user_id 和 access_token 中保存的 user_id 进行比较,确认了身份在进行修改。

在模型类中实现检验修改密码 token 的方法,取出 data,判断 user_id 是否一样;

定义重置密码序列化器,判断两次密码是否一样,判断是否是当前用户,返回数据;

调用 updata 方法更新密码;

返回重置密码成功信息。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181201G13KNB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券