您的位置:首页 > 其它

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

2017-01-18 16:40 337 查看
当用户注册后,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'))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐