通过项目来深入理解tornado(五):登录功能实现

通过项目来深入理解tornado(五):登录功能实现

 

登录这块其实挺简单的,我没有使用传统的seesion而是使用了jwt

也就是json web token,关于这个,可以戳这里

先上代码,后面解释

class LoginHandler(RequestHandler):

    async def post(self, *args, **kwargs):
        params = json.loads(self.request.body.decode('utf8'))
        form = LoginForm.from_json(params)
        re_data = {}

        if form.validate():
            # 登录逻辑
            mobile = form.mobile.data
            password = form.password.data
            try:
                user = await self.application.objects.get(User, mobile=mobile)
                if user.password.check_password(password):
                    data = {
                        'id':user.id,
                        'nick_name':user.nick_name,
                        'exp':datetime.utcnow()
                    }
                    # 生成json web token
                    token = jwt.encode(data, self.settings['secret_key'], algorithm='HS256')
                    re_data['id'] = user.id
                    re_data['token'] = token.decode('utf8')

                else:
                    self.set_status(400)
                    re_data['non_fields'] = '用户名或者密码错误'

            except User.DoseNotExist:
                self.set_status(400)
                re_data['mobile'] = '用户不存在'

        else:
            self.set_status(400)
            re_data['non_fields'] = '用户名或者密码错误'

        self.finish(re_data)

  这里主要是之前的表单里说明了使用到了password的字段

  所以在user.password.check_password(password):这里可以用这个方法来检查密码是否正确

  但是不能直接验证, 因为数据库存的不是明文

  然后就是jwt的使用了

  

data = {
                       'id':user.id,
                        'nick_name':user.nick_name,
                        'exp':datetime.utcnow()
                    }
                    # 生成json web token
                    token = jwt.encode(data, self.settings['secret_key'], algorithm='HS256')
                    re_data['id'] = user.id

  一定要记得设置jwt的过期时间,exp = datetime.now()

总结:

1.验证密码使用user.password.check_password()

2.jwt的使用(github上的pyjwt)

 

posted @ 2018-11-26 20:53  __Miracle  阅读(1072)  评论(0编辑  收藏  举报