创新设计记录(一)

1.注册功能

关键功能

  • 三个框,用户邮箱,密码,验证码

  • 开启官方邮箱,用来发验证码(QQ 网易都支持开启smtp协议,找教程,用邮箱不用手机号是为了省买发短信云服务的钱)

  • 验证码缓存于redis,5min内有效

  • 验证密码长度,验证码是否正确

  • 新用户信息保存于mysql,密码使用md5第三方库进行加密

1.1安全性验证

  • 对用户密码使用md进行加密,hashlib库是内置的,可以直接用于实现MD5加密,无需额外安装第三方库。

from hashlib import md5
# 对密码进行MD5加密
password_hash = md5(register_form.password.encode('utf-8')).hexdigest()
  • 用户成功注册后,使用md加密存入数据库。

  • 同时,在注册接口中,对各种情况做了处理,例如用户重复注册。

2.登录功能

关键任务:

  • 用户邮箱与密码登录

  • 校验身份

  • 根据用户身份信息(也即邮箱,但不要包含密码)生成token

  • 将token附带在响应中,发回客户端

2.1安全性验证

生成一个token,特别是JWT(JSON Web Token),通常包含三个部分:头部(Header)、载荷(Payload)和签名(Signature)。基于用户的身份信息(在这里是邮箱),我们可以设计一个简单的JWT生成过程,不包含密码。以下是使用Python的pyjwt库来生成JWT的一个示例步骤:

import jwt
from datetime import datetime, timedelta
import uuid
​
# 定义秘钥,用于签名,应妥善保管,不能泄露
SECRET_KEY = "your_secret_key_here"
ALGORITHM = "HS256"  # 使用HS256算法进行签名
​
def generate_token(email):
    # 载荷包含声明,这里是用户邮箱
    payload = {
        "sub": "user_email",  # 'sub' 代表subject,这里用邮箱标识用户身份
        "email": email,
        "exp": datetime.utcnow() + timedelta(hours=1),  # 设置过期时间为1小时后
        "iat": datetime.utcnow(),  # 发行时间
        "jti": str(uuid.uuid4()),  # JWT ID,用于唯一标识JWT,防止重复使用
    }
    
    # 生成JWT
    token = jwt.encode(payload, SECRET_KEY, algorithm=ALGORITHM)
    
    return token
​
# 示例:使用邮箱生成Token
email = "example@example.com"
token = generate_token(email)
print(token)
  • 在本次开发中,token主要用于身份验证与授权:Token作为一种临时的访问凭证,用于验证用户身份并控制他们访问特定资源或执行特定操作的权限。用户首次登录时,服务器验证其凭据(用户名和密码),并通过响应发送一个Token。之后,客户端在每次请求服务时携带这个Token,而不是反复发送用户名和密码,以此提升安全性并简化后续的认证流程。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值