_generate_jwt_token中的格式字符串无效
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了_generate_jwt_token中的格式字符串无效相关的知识,希望对你有一定的参考价值。
这是我正在关注的教程,链接
https://thinkster.io/tutorials/django-json-api/authentication
正如标题所示,我在此行收到此错误“无效的格式字符串”:
'exp':int(dt.strftime('%s'))
_generate_jwt_token。
我查看了strftime的文档,并且没有这样的格式'%s'有一个大写的S('%S'),我将格式更改为大写S,但我在尝试时遇到错误解码授权令牌,我得到以下错误
{“user”:{“detail”:“身份验证无效。无法解码令牌。”}}
如果我保留小写s,我会收到“无效的格式字符串”错误。
(authentication/backends.py)
def _authenticate_credentials(self, request, token):
"""
Try to authenticate the given credentials. If authentication is
successful, return the user and token. If not, throw an error.
"""
try:
payload = jwt.decode(token, settings.SECRET_KEY)
except:
msg = 'Invalid authentication. Could not decode token.'
raise exceptions.AuthenticationFailed(msg)
(authentication/models.py)
def _generate_jwt_token(self):
"""
Generates a JSON Web Token that stores this user's ID and has an expiry
date set to 60 days into the future.
"""
dt = datetime.now() + timedelta(days=60)
token = jwt.encode({
'id': self.pk,
'exp': int(dt.strftime('%s'))
}, settings.SECRET_KEY, algorithm='HS256')
return token.decode('utf-8')
我期望以下标记“Token eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MiwiZXhwIjo0fQ.TWICRQ6BgjWMXFMizjNAXgZ9T2xFnpGiQQuhRKtjckw”返回用户。
我也被困在这里,这是导致错误的特定于平台的%s。我更改为%S(注意资本)
它应该是:
token = jwt.encode({
'id': self.pk,
'exp': dt.utcfromtimestamp(dt.timestamp()) #CHANGE HERE
}, settings.SECRET_KEY, algorithm='HS256')
这是因为jwt将到期时间与utc时间进行比较。您可以在此处使用jwt调试工具仔细检查您的密钥是否正确:https://jwt.io/
更多阅读:https://pyjwt.readthedocs.io/en/latest/usage.html#encoding-decoding-tokens-with-hs256
以上是关于_generate_jwt_token中的格式字符串无效的主要内容,如果未能解决你的问题,请参考以下文章
js正则匹配替代指定字符(根据img标签的src中的命名规则,用正则表达式替换成下面格式的文字)
MFC按行读入文本内容,并按要求截取字符串内容 文本中的内容格式如下: