PythonFlask“无效凭据”

2024-04-26 14:53:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我是从教程视频中学习它的新手。我正在尝试进行身份验证并获取访问令牌。我已经在user.py中创建了用户类:


    class User:
    def __init__(self, _id, username, password):
        self.id = _id,
        self.username = username,
        self.password = password


在mysecurity.py中:


from werkzeug.security import safe_str_cmp
from user import User

users = [
    User(1, 'user1', 'abcxyz'),
]

username_table = {u.username: u for u in users}
userid_table = {u.id: u for u in users}

def authenticate(username, password):
    user = username_table.get(username, None)
    print(username) # user1
    print(password) # abcxyz
    print(username_table) #{('user1',): <user.User object at 0x000001AD37543358>}
    print(user) # None
    if user and safe_str_cmp(user.password.encode('utf-8'), password.encode('utf-8')):
        return user

def identity(payload):
    user_id = payload['identity']
    return userid_table.get(user_id, None)

正如你所看到的,我试图调试打印出所有内容。在身份验证功能中,我成功地从请求中获取了用户名和密码。但在结果中,用户变量为无。看起来.get方法不起作用,这是导致错误的原因,但我不明白为什么我在那里得到None。我已经在打印功能前面显示了输出


Tags: pyselfnone身份验证idgetdeftable
1条回答
网友
1楼 · 发布于 2024-04-26 14:53:41

我想你的程序有一个输入错误。请删除User类的__init__中用户名后的,。这在语法上是正确的,并且是用一个元素创建元组的方法,而这个元素不是您所需要的

>>> tuple_with_single_element = "python",
>>> tuple_with_single_element
... ('python',)
>>> python_string = "python"
>>> python_string
... 'python'

相关问题 更多 >