Flask学习总结笔记(11) -- 利用itsdangerous实现用户身份确认

当用户注册后,Web服务需要提供一个身份真实性认证的过程,比如发送确认邮件等等。只有用户点击了确认的邮件,注册的账号才能被激活。

我们可以将http://www.site.com/auth/conmfirm/id的激活链接方式作为邮件内容发送给注册者,其中id是数据库分配给注册用户的自增编号。但是这种方式很不安全,恶意者可以伪造id值。因此,我们需要对信息进行加密处理,将id换成携带身份信息的令牌值。Flask使用加密的签名cookie保护用户会话,这种安全的cookie使用的是itsdangerous 包。同样地,我们也可以用itsdangerous 来生成携带用户信息的安全令牌。

0x01 相关函数

from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
#生成确认的confirm链接token信息
def generate_confirm_token(self, expiration_in =3600):
    s=Serializer(current_app._get_current_object().config['SECRET_KEY'], expiration_in)
    return s.dumps({'confirm':self.id})

TimedJSONWebSignatureSerializer类生成的是具有过期时间的JSON Web签名。expiration_in参数设置令牌的过期时间,单位为秒。

0x02 发送验证邮件

auth/views.py视图文件中,添加发送携带验证token的邮件给注册用户:

#用户注册
@auth.route('/register/',methods=['POST','GET'])
def register():
    if current_user.is_authenticated:
        return redirect('main.index')
    form=RegisterForm()
    if form.validate_on_submit():
        user=Users(username=form.username.data,
                   email=form.email.data,
                   password=form.password.data)
        db.session.add(user)
        db.session.commit()
        #发送邮件(产生token)
        token=user.generate_confirm_token()
        from app.email import sendMail
        emails=[]
        emails.append(user.email)
        sendMail.send_mail(u'激活您注册的账号',emails,'email/active.html',user=user,token=token)
        flash(u' 一封激活账号的邮件已经发送到您的注册有相中')
        return redirect(url_for('auth.login'))
    return render_template('auth/register.html',form=form)

上面发送邮件的过程参见我以前的博客:Flask学习总结笔记(8) – 利用Flask-mail实现电子邮件发送功能

0x03 验证确认过程

auth/views.py文件中,定义用户点击的url的处理过程:

#账号激活处理
@auth.route('/confirm/<token>')
@login_required
def confirm(token):
    if current_user.confirmed:
        return redirect('main.index')
    if current_user.confirm(token):
        flash(u'您的账号已被激活')
    else:
        flash(u'访问链接非法')
    return redirect(url_for('main.index'))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值