邮箱找回密码实现

思路:

点击邮箱找回:前端给后端服务器发送请求

get:http://127.0.0.1:8000/api/v1/email?email=7777777777@qq.com

后端发送邮件:邮件内容包含修改密码页面的连接,url拼接:加密token(包含email信息)

邮件内点击连接:给前端服务器发送请求,输入密码页面

get:http://106.53.251.122:3004/#/resetPwd?email_token=加密token(包含email信息)

前端页面填写密码:给后端服务器发送请求

post:http://127.0.0.1:8000/api/v1/set_password

参数:加密token(包含email信息)

后端修改密码

1 生成 token

"""生成token"""

import jwt

import datetime

from linde import settings

from jwt import exceptions

SALT = settings.SECRET_KEY

TOKEN_EXPIRED_TIME = settings.TOKEN_EXPIRED_TIME

def get_token(data, exp):

"""构造token"""

headers = {

'typ': 'jwt',

'alg': 'HS256'

}

# 构造payload

payload = {

'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=exp["seconds"]), # 过期时间

'data': data # 数据

}

jwt_token = jwt.encode(payload=payload, key=SALT, algorithm="HS256", headers=headers).decode('utf-8')

return jwt_token

def parse_payload(token):

"""

对token进行和发行校验并获取payload

"""

try:

parse_result = jwt.decode(token, SALT, True)

except exceptions.ExpiredSignatureError:

parse_result = 0

return parse_result

if __name__ == '__main__':

result = get_token({'email':'qqq'}, TOKEN_EXPIRED_TIME)

print(result)

payload = parse_payload(result)

print(payload)

2 后端视图

# django提供的发送邮件服务

from django.core.mail import send_mail

class EmailView(APIView):

"""

邮箱找回密码

"""

def post(self, request, version):

email = request.data.get('email')

if not email:

resp = unified_response(code=status.InputErr, message='缺少邮箱信息')

return Response(resp)

user_obj = UserInfo.objects.filter(email=email).first()

if not user_obj:

resp = unified_response(code=status.Usernotfound, message='该用户不存在')

return Response(resp)

email_token = get_token({'email': email}, settings.TOKEN_EXPIRED_TIME)

url = settings.VUE_URL + '?email_token=%s' % email_token

subject = '找回密码'

html_message = '''

尊敬的用户:

您好,请点击重置密码链接,完成重置密码,有效时间10分钟。

如果您无法打开该链接,请复制%s 到浏览器中进行操作。

''' % (url, url)

try:

send_mail(subject, message=None, html_message=html_message, from_email=settings.EMAIL_HOST_USER,

recipient_list=[email, ])

logger.info('发送了找回密码邮件:%s'%email)

resp = unified_response()

except Exception:

resp = unified_response(code=status.InputErr, message='无法给该地址发送邮件')

return Response(resp)

def put(self, request, version):

"""重置密码"""

email_token = request.data.get('email_token')

new_password = request.data.get('new_password')

re_password = request.data.get('re_password')

# {'exp': 1657015855, 'data': {'email': 'qqq'}}

email_payload = parse_payload(email_token)

if email_payload != 0:

email = parse_payload(email_token).get('data').get('email')

if new_password == re_password:

user_obj = models.UserInfo.objects.filter(email=email).first()

if user_obj:

user_obj.set_password(new_password)

user_obj.save()

resp = unified_response()

else:

resp = unified_response(code=status.Usernotfound, message='邮箱不正确,用户不存在')

else:

resp = unified_response(code=status.PasswordDefErr, message='两次密码不一致')

else:

resp = unified_response(code=status.PermissionErr, message='token过期')

return Response(resp)

js加mysql写邮箱找回密码_邮箱找回密码实现相关推荐

  1. js加mysql写邮箱找回密码_邮箱找回密码 · woyong/docs Wiki · GitHub

    第三方平台申请松鼠号 [申请松鼠号][post_songshu_device] [post_songshu_device]:https://github.com/woyong/docs/wiki/申请 ...

  2. 怎么知道 网站是否直接明文保存密码_忘记账号密码 浏览器记住了 怎么找回密码?...

    对于健忘又没有使用保存密码插件的习惯的人来说,忘记密码是经常的事情. 而大家知道的也就是通过网站的找回密码选项,通过邮箱,手机号,人工等方式找回密码,但是如果是个小网站,没有找回的功能,或者当时是随便 ...

  3. 如何重新设置苹果id密码_苹果手机id密码忘了怎么办 苹果手机id密码忘了怎么办怎么找回Apple id密码...

    苹果手机在不越狱的情况下,下载什么东西都需要ID账号跟密码,才能进行下一步,操作起来确实很繁琐,不如安卓系统那么来得直接,下载就可以直接安装使用:但是这一方面或许是增加拉一定的安全性吧:但是如果ID账 ...

  4. mysql 5.7 修改密码_又忘记密码啦?教你几种更改密码的方式

    前言: 在日常使用数据库的过程中,难免会遇到需要修改账号密码的情景,比如密码太简单需要修改.密码过期需要修改.忘记密码需要修改等.本篇文章将会介绍需要修改密码的场景及修改密码的几种方式. 1.忘记 r ...

  5. phpmyadmin忘记mysql密码_忘记phpmyadmin密码怎么重置

    忘记phpmyadmin密码怎么重置,新密码,教程,相关文章,重新启动,跳过 忘记phpmyadmin密码怎么重置 易采站长站,站长之家为您整理了忘记phpmyadmin密码怎么重置的相关内容. 1. ...

  6. linux 内存密码_您的密码错误是内存问题

    linux 内存密码 Let's play a game. Look at this string of characters for a minute and then see if you can ...

  7. 如何重新设置苹果id密码_苹果ID密码忘了怎么办?

    Apple ID 是我们用来登录所有 Apple 服务的账户,对于苹果用户的重要性不言而喻.可是再小心偶尔还是会遇到ID密码忘了的这种情况,非常的影响使用.那么,苹果ID密码忘了该怎么办?接下来给大家 ...

  8. 如何重新设置苹果id密码_苹果ID密码忘记应该怎么做

    iPhone是Apple开发的一系列智能手机,配备了Apple开发的iOS移动操作系统.如果忘记了计算机密码,也可以找到网络管理员,但是如果忘记了手机ID密码,则只能自己解决.让我们看看如果您忘记了A ...

  9. git不再询问帐号密码_您的密码不再是秘密,第1部分

    git不再询问帐号密码 当然,标题是一个把戏. 目前,您的密码仍然是秘密的. 为确保它保持不变,请尝试对自己回答以下问题: 您的密码强度如何 ? 为了防止其他人发现它们,它们应该有多强? 您的密码习惯 ...

最新文章

  1. 编辑数学公式_LaTeXiT for mac(数学公式编辑器)
  2. 公司--下载svg图片
  3. C++11 并发指南二(std::thread 详解)
  4. “无法找到运行搜索助理需要的一个文件”的解决办法
  5. 中国互联网络发展状况统计报告
  6. Iterator pattern-迭代器模式
  7. cubase计算机音乐,Cubase与Nuendo电脑音乐制作从新手到高手 (200例)
  8. 从事IC设计工作强度大不大?是吃青春饭吗?
  9. 制造业数字化转型存在哪些问题
  10. python判别性别的代码_根据三围数据判断出用户性别竟是python使用逻辑回归算法搞的鬼!...
  11. 设计模式之原型模式【选用鸣人影分身阐述】
  12. 新浪微博发布文章html,JS实现仿新浪微博发布内容为空时提示功能代码
  13. 沙特国王科技大学计算机专业,沙特国王科技大学好不好?在世界的排名怎么样啊?哪个专业最强?...
  14. iOS 架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)
  15. python中异常处理-安装包失败
  16. 关于NAS搭建的那些事
  17. 蚂蚁金服面试复盘(插播)
  18. 海滩生存java_野外求生技巧:海滨生存技能,不同地形的生存要领
  19. 【DNF】收藏版网游单机版简体中文一键端横版地下城90局域网架设GM
  20. 火星双色球预测程序终于面世!就此全面终结双色球彩票的生路,哈哈!

热门文章

  1. 高斯函数的matlab表达式,高斯函数在图像处理中的应用
  2. java内存释放_如何释放Java中的内存?
  3. 探讨如何利用C#登录QQ邮箱进行群邮件的发送
  4. Vue3那些实用小知识~
  5. 记录一次实验-华科20年秋季数据库实验(小课设)
  6. docker打开2375
  7. EasyExcel 基本使用、通俗易懂①
  8. 向外张扬的人在做梦,向内审视的人才最清醒
  9. delphi 往 excel 指定单元格中插入图片
  10. eclipse中常见的红叉叉