web程序中的用户注册

说起来web程序中的用户注册是非常简单了。主要包括用户注册和验证邮箱两步。
1.用户注册
用户注册主要包括三个信息,一是用户名,二是密码 ,三是邮箱。
用户名需要验证字段值和字段长度的限制。可以用正则表达式Regexp验证字段值是否合法。比如只允许由英文字母和数字组成,可以使用Regexp("︿[a-zA-Z0-9]*$",message=“The username should contain only a-z,A-Z,and 0-9”);验证。长度可以使用Length(1,X)验证。再则,用户名不可以重复,要使用自定义验证函数验证。比如

def validate_username(self,field):
    if User.query.filter(username=field.data).first():
        raise ValidationError('The username is already in use')

2.密码
为了防止密码输错,一般密码要求输入两遍password、password2,在password中使用EqualTO(‘password2’)验证器来验证。密码的值域也可以使用Regexp正则表达式来验证,长度同上。
3.邮箱
邮箱不能够重复,验证方法同用户名的重复验证方法。邮箱还要发送邮件进行真实性验证。
在向已填写的邮箱发送确认的URl时因为涉及到信息的保密和防止用户直接 登录相应的url绕过验证,要用到令牌,只有使用邮箱接收到令牌才可以进行验证。现在常用的是利用JWT技术,即对json数据进行签名。其核心为itsdangerous函数。

from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from itsdangerous import BadSignture,SigntureExpired
from flask import current_app
from *.extensions  import db
def generate_token(user,expire_in=600):
    s=Serializer(current_app.config['SECRET_KEY',expire_in])
    data={"id":"user.id"}
    return s.dumps(data)
def  validate_token(user,token):
    s=Serializer(current_app.config['SECRET_KEY'])
    try:
        data=s.loads(token)
     except (SignatureExpired,BadSignture):
        return False
    if user.id=data.get('id'):
        user.confirmed=True
        db.session.commit()

邮箱的验证实质为:首先服务器发送给用户邮箱一个签名了的URL,URL中包含用户的信息(主要是ID),然后用户访问这个URL,服务器首先验证签名,然后根据ID值写入用户的验证状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值