通過項目來深入理解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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM