首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >tornado 使用jwt完成用户异步认证

tornado 使用jwt完成用户异步认证

作者头像
编程黑洞
发布2023-03-06 19:19:18
发布2023-03-06 19:19:18
5850
举报
文章被收录于专栏:编程黑洞编程黑洞

# 简介

在使用特定功能时,需要验证用户是否登录。使用jwt将用户不敏感的信息保存在客户端上,然后访问时,将加密的信息发送给服务端验证。

和session的不同之处在于,session需要在两端都存储,而jwt仅在客户端存储。

该项目的github地址: tornado_learning.git (opens new window)

# 栗子

创建异步验证的装饰器

从header中获取tsessionid的jwt token信息,然后从token获取用户id,从数据库中查找用户信息,再验证token是否过期。

代码: utils/authenticated_async.py

代码语言:javascript
复制
def authenticated_async(method):
    async def wrapper(self, *args, **kwargs):

        # ret_data = {}

        tsessionid = self.request.headers.get("tsessionid", None)
        if tsessionid:

            try:
                payload = jwt.decode(tsessionid, self.settings["secret_key"], leeway=self.settings["jwt_expire"],
                                     options={"verify_exp": True})

                user_id = payload["id"]
                try:
                    user = await self.application.objects.get(User, id=user_id)
                    self._current_user = user
                    await method(self, *args, **kwargs)
                except User.DoesNotExist as e:
                    self.set_status(401)
            except jwt.ExpiredSignatureError as e:
                self.set_status(401)

    return wrapper

在请求上添加用户认证

每次在请求该接口时,都需要对进行用户认证,认证通过才能访问该接口。

代码: apps/school/handle.py

代码语言:javascript
复制
from utils.authenticated_async import authenticated_async

class StudentHandler(BaseHandler):

    @authenticated_async
    async def get(self):
        id = self.get_argument("id", None)
        if not id:
            return self.write("please provide the 'id'")

        student = await self.application.objects.get(Student, id=id)

        try:
            self.write({
                "id": student.id,
                "name": student.name
            })
        except Student.DoesNotExist:
            raise tornado.webHttpError(404, "Object not found")
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 简介
  • # 栗子
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档