使用 JWT 模块时出现错误“用户不存在错误”
Posted
技术标签:
【中文标题】使用 JWT 模块时出现错误“用户不存在错误”【英文标题】:While using JWT module i am getting an error "user does not exists error" 【发布时间】:2021-01-21 15:46:27 【问题描述】:我正在学习简单的 python JWT 模块。我正在使用restfull api创建一个令牌,然后使用相同的令牌来获取数据,但不幸的是我收到一个错误“用户不存在”。
Python代码sn-p
class User:
def __init__(self, _id, username, password):
self.id = _id
self.username = username
self.password = password
users = [
User(1, "bob", "asdf")
]
username_mapping = u.username: u for u in users
userid_mapping = u.id: u for u in users
def authenticate(username, password):
user = username_mapping.get(username, None)
if user and user.password == password:
return user
def identity(payload):
user_id = payload["identity"]
return username_mapping.get(user_id, None)
##使用此函数进行身份验证
app = Flask(__name__)
app.secret_key = "jose"
api = Api(app)
jwt = JWT(app,authenticate, identity)
def abort_if_item_not_exist(name):
item = next(filter(lambda x: x["name"] == name, items), None)
if item == None:
abort(404, message = "This item does not exist")
else:
return "item": item
class Item(Resource):
@jwt_required()
def get(self,name):
return abort_if_item_not_exist(name)
【问题讨论】:
你能发帖吗?请将令牌添加到问题中?并显示您创建它的代码 您是否尝试通过转至 Authorisation->Type->Bearer Token 将您的令牌插入 Postman 并将您的令牌复制粘贴到“令牌”右侧框中? 是的,我试过“Bearer Token”它给了我一个错误“不支持的授权类型” 令牌在屏幕截图中,每次我进行身份验证时都会生成新令牌。 JWT Eyj0Exaiojkv1qilcjhbgciojiuzi1nij9.eyjlehaioje2mdiwnjy5ntcsimlhdci6mtywmja2njy1nywibmjmijoxnjaymdy2nju3lcjpzgvudgl0si6mx0.mh5go-w1a4oo3q7sxuhakxzt1wwykf1t1myk8x2x8sw span> 我已经看到了截图,但是我无法通过仅仅看它来解码我脑海中的令牌,我想在jwt.io 上检查它,看看里面有什么。 【参考方案1】:我找到了答案,感谢jsp,他指出了一个网站。我分析并获得了有效载荷身份ID。然后我意识到我得到了一个 ID,我正在将它与错误的值进行比较。这只是我的错字。
def identity(payload):
user_id = payload["identity"]
return userid_mapping.get(user_id, None) # This needs to be changed
【讨论】:
以上是关于使用 JWT 模块时出现错误“用户不存在错误”的主要内容,如果未能解决你的问题,请参考以下文章
使用 Go 向 APNS 发出推送请求时出现 403 禁止错误。我是不是正确创建了 JWT?
UnauthorizedError:身份验证时出现 jwt 格式错误的错误
使用 RSA 算法 Django Rest Framework 简单 JWT 时出现错误无法反序列化密钥数据