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

20 篇文章 0 订阅
6 篇文章 0 订阅

简介

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

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

该项目的github地址: tornado_learning.git

使用。 登录的栗子

创建异步验证的装饰器

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

代码: utils/authenticated_async.py

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


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")

欢迎关注,互相学习,共同进步~

我的个人博客

我的微信公众号:编程黑洞

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值