首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask Python身份验证错误: identity = getattr(identity,'id')或identity['id']

Flask Python身份验证错误: identity = getattr(identity,'id')或identity['id']
EN

Stack Overflow用户
提问于 2020-09-27 15:28:39
回答 1查看 161关注 0票数 0

我正在使用identity = getattr(identity, 'id') or identity['id']和flask_jwt尝试一个简单的身份验证逻辑,它过去通常可以正常工作,但突然间我得到了这个异常: Flask

下面是我的用户模型:

代码语言:javascript
复制
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

这是我的安全模块:

代码语言:javascript
复制
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)

我不知道是什么导致了这个异常,我知道有更复杂的方法来解决这个问题,但我正在构建我的应用程序,从一个简单的初级应用程序到一个更符合当前实践的应用程序,下面是堆栈跟踪:

代码语言:javascript
复制
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'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-27 15:40:33

如文档所示,(https://pythonhosted.org/Flask-JWT/) Flask jtf要求您的User类具有id属性,而不是_id属性

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64085961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档