gpt4 book ai didi

angularjs - Django Rest Framework JWT : How to change the token expiration time when logged in

转载 作者:行者123 更新时间:2023-12-03 09:10:34 24 4
gpt4 key购买 nike

我将Django REST框架JWT Auth用于 session 创建和权限,唯一的问题是:登录时以及 token 过期后,除非再次登录,否则我无法继续执行所需的操作。而且我并不完全了解为附加设置提供的文档。

因此,谁能解释一种动态创建(和刷新) token (遵循最佳实践)的方法,以便在登录后继续进行操作。

P.S:我在前端使用angular 2,并将 token 插入Http request header 中。谢谢。

最佳答案

JWT token 刷新有些困惑,我希望这个解释能对您有所帮助。

  • token 具有issued at时间( token 中的iat)
  • token 具有一个expiration date(例如now()+ 1小时)
  • 无法更改 token 。服务器只能发布一个一个
  • iat永远不会改变,但是expires确实会随着每次刷新
  • 而改变

    当您想要扩展 token 时,将发生以下情况:
  • 您将token发送到服务器端点/.../refresh/
  • 服务器检查其未过期:now() <= token.iat + JWT_REFRESH_EXPIRATION_DELTA
  • 如果未过期:
  • 发行一个新的 token (在json主体中返回,与登录名相同)
  • 新 token 对now() + JWT_EXPIRATION_DELTA有效
  • token 中的issued at值不会更改
  • 应用程序现在(技术上)具有2个 token 。
  • 应用程序丢弃旧 token 并开始发送新 token
  • 如果已过期:返回错误消息和400状态

  • 例子

    您有 EXPIRATION=1 hourREFRESH_DELTA=2 days。登录时,您会得到一个 token ,上面写着“created-at:Jun-02-6pm”。您可以将此 token (或通过刷新创建的任何 token )刷新2天。这意味着,对于该登录,您无需重新登录即可使用 token 的最长时间为2天零1个小时。您可以每1秒钟刷新一次,但是2天后服务器将完全停止允许刷新,并为您提供1小时有效的最终 token 。 (头疼)。

    设定值

    您必须在Django设置文件中 JWT_AUTH设置的后端中启用此功能。我相信默认情况下它是关闭的。这是我使用的设置:
    JWT_AUTH = {
    # how long the original token is valid for
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=2),

    # allow refreshing of tokens
    'JWT_ALLOW_REFRESH': True,

    # this is the maximum time AFTER the token was issued that
    # it can be refreshed. exprired tokens can't be refreshed.
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
    }

    然后,您可以调用JWT刷新 View ,将您的 token 传递到正文中(作为json)并获取新的 token 。详细信息在 http://getblimp.github.io/django-rest-framework-jwt/#refresh-token中的文档中
    $ http post localhost:8000/auth/jwt/refresh/ --json token=$TOKEN

    哪个返回:
    HTTP 200 
    {
    "token": "new jwt token value"
    }

    关于angularjs - Django Rest Framework JWT : How to change the token expiration time when logged in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43780955/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com