Flask Python Authentication error: identity = getattr(identity, 'id') or identity['id']
Flask Python Authentication error: identity = getattr(identity, 'id') or identity['id']
我正在尝试使用 Flask 和 flask_jwt 的简单身份验证逻辑,它曾经正常工作,但突然间我开始遇到此异常:
identity = getattr(identity, 'id') or identity['id']
这是我的用户模型:
class UserModel:
def __init__(self, id, username, password):
self._id = id
self.username = username
self.password = password
@classmethod
def find_by_username(cls, username):
db = sqlite3.connect(path)
cursor = db.cursor()
query = 'SELECT * FROM users WHERE username=?'
result = cursor.execute(query, (username,))
row = result.fetchone()
if row:
user = cls(*row)
else:
user = None
db.close()
return user
@classmethod
def find_by_id(cls, _id):
db = sqlite3.connect(path)
cursor = db.cursor()
query = 'SELECT * FROM users WHERE id=?'
result = cursor.execute(query, (_id,))
row = result.fetchone()
if row:
user = cls(*row)
else:
user = None
db.close()
return user
这是我的安全模块:
def authenticate(username, password):
print("authenticate was called.")
user = UserModel.find_by_username(username)
print(user)
if user and safe_str_cmp(user.password, password):
return user
def identity(payload):
user = payload['identity']
return UserModel.find_by_id(user)
我不知道是什么导致了这个异常,我知道有更复杂的方法可以解决这个问题,但我正在构建我的应用程序,从一个简单的基本应用程序到一个更符合当前要求的应用程序练习一,这里是堆栈跟踪:
Traceback (most recent call last):
File "C:\Users\EM\PycharmProjects\Learn\venv\lib\site-packages\flask\app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
...
File "C:\Users\EM\PycharmProjects\Learn\venv\lib\site-packages\flask_jwt\__init__.py", line 125, in _default_auth_request_handler
access_token = _jwt.jwt_encode_callback(identity)
File "C:\Users\EM\PycharmProjects\Learn\venv\lib\site-packages\flask_jwt\__init__.py", line 62, in _default_jwt_encode_handler
payload = _jwt.jwt_payload_callback(identity)
File "C:\Users\EM\PycharmProjects\Learn\venv\lib\site-packages\flask_jwt\__init__.py", line 53, in _default_jwt_payload_handler
identity = getattr(identity, 'id') or identity['id']
AttributeError: 'UserModel' object has no attribute 'id'
如文档所示,(https://pythonhosted.org/Flask-JWT/) Flask jtf 要求您的 User
class 具有 id
属性,而不是 _id
属性
我正在尝试使用 Flask 和 flask_jwt 的简单身份验证逻辑,它曾经正常工作,但突然间我开始遇到此异常:
identity = getattr(identity, 'id') or identity['id']
这是我的用户模型:
class UserModel:
def __init__(self, id, username, password):
self._id = id
self.username = username
self.password = password
@classmethod
def find_by_username(cls, username):
db = sqlite3.connect(path)
cursor = db.cursor()
query = 'SELECT * FROM users WHERE username=?'
result = cursor.execute(query, (username,))
row = result.fetchone()
if row:
user = cls(*row)
else:
user = None
db.close()
return user
@classmethod
def find_by_id(cls, _id):
db = sqlite3.connect(path)
cursor = db.cursor()
query = 'SELECT * FROM users WHERE id=?'
result = cursor.execute(query, (_id,))
row = result.fetchone()
if row:
user = cls(*row)
else:
user = None
db.close()
return user
这是我的安全模块:
def authenticate(username, password):
print("authenticate was called.")
user = UserModel.find_by_username(username)
print(user)
if user and safe_str_cmp(user.password, password):
return user
def identity(payload):
user = payload['identity']
return UserModel.find_by_id(user)
我不知道是什么导致了这个异常,我知道有更复杂的方法可以解决这个问题,但我正在构建我的应用程序,从一个简单的基本应用程序到一个更符合当前要求的应用程序练习一,这里是堆栈跟踪:
Traceback (most recent call last):
File "C:\Users\EM\PycharmProjects\Learn\venv\lib\site-packages\flask\app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
...
File "C:\Users\EM\PycharmProjects\Learn\venv\lib\site-packages\flask_jwt\__init__.py", line 125, in _default_auth_request_handler
access_token = _jwt.jwt_encode_callback(identity)
File "C:\Users\EM\PycharmProjects\Learn\venv\lib\site-packages\flask_jwt\__init__.py", line 62, in _default_jwt_encode_handler
payload = _jwt.jwt_payload_callback(identity)
File "C:\Users\EM\PycharmProjects\Learn\venv\lib\site-packages\flask_jwt\__init__.py", line 53, in _default_jwt_payload_handler
identity = getattr(identity, 'id') or identity['id']
AttributeError: 'UserModel' object has no attribute 'id'
如文档所示,(https://pythonhosted.org/Flask-JWT/) Flask jtf 要求您的 User
class 具有 id
属性,而不是 _id
属性