【问题标题】:Django: How to renew SimpleJWT access token when token are stored in HttpOnly cookies?Django:当令牌存储在 HttpOnly cookie 中时,如何更新 SimpleJWT 访问令牌?
【发布时间】:2021-05-18 17:33:09
【问题描述】:

我已将 SimpleJWT accessrefresh 令牌存储在 HttpOnly cookie 中。现在,如何在 refresh 令牌过期后重现 access 令牌?

React 中,我使用setTimeout() 请求新的access 令牌,它工作得很好。现在我将这些存储为HttpOnly cookie,如何检查access 是否有效,如果无效,创建并发送一个新的access 令牌作为HttpOnly cookie?

我有这个中间件,我将 cookie 中的令牌添加到授权中间件,是否可以在任何此类中间件中更新令牌:

class AuthorizationHeaderMiddleware:
    def __init__(self, get_response=None):
        self.get_response = get_response

    def process_view(self, request, view_func, view_args, view_kwargs):
        view_name = '.'.join((view_func.__module__, view_func.__name__))
        #print(view_name)
        if view_name in EXCLUDE_FROM_MIDDLEWARE:
            return None
    
    def __call__(self, request):
        access_token = request.COOKIES.get('access')
        if access_token:
            request.META['HTTP_AUTHORIZATION'] = f'Bearer {access_token}'
        return self.get_response(request)

【问题讨论】:

    标签: django django-rest-framework django-rest-framework-simplejwt cookie-httponly


    【解决方案1】:

    我假设您在后端获取并刷新访问令牌。如果这不适合您的用例,请告诉我。

    您可以在生成访问令牌后将过期时间存储在 cookie 上。在您的 __call__ 方法上,检查它是否超过了到期时间。如果是这样,请生成一个新令牌并将其与新的过期时间一起设置在 cookie 上。

    【讨论】:

    • 是的,我了解您的解决方案。现在,我如何检查__call__ 内的到期时间以及它是否会继续在后台循环运行?你能显示一些代码吗?
    猜你喜欢
    • 2021-05-20
    • 2021-10-07
    • 2023-02-02
    • 2021-10-16
    • 2021-05-17
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多