【问题标题】:Customizing the Flask-JWT authenticate function自定义 Flask-JWT 身份验证功能
【发布时间】:2017-09-12 16:40:48
【问题描述】:

在 Flask 初始化文件中,我有

app = Flask("myapp")
jwt = JWT(app, AuthController.staff_login, identity)
api.add_resource(StaffLogin, '/login')

StaffLogin 检查用户名/密码,然后调用AuthController.staff_login

class AuthController():
    def __init__(self):
        # TODO: Create a config.yaml
        self.engine = create_engine(DefaultConfig.SQLALCHEMY_DATABASE_URI)
        Base.metadata.create_all(self.engine)

        DBSession = sessionmaker(bind=self.engine)
        self.session = DBSession()                   

    def staff_login(self, staff_name, staff_password):
        result = self.session.query(Staff) # Irrelevant details of query removed
        if Staff_Authentication.check_password(staff_password, query['staff_password']):
                # Build login_response as JSON
                return login_response

现在我需要这种格式的自定义登录响应

[
    {
        "projects": [
            {
                "project_id": 1,
                "project_name": "omnipresence",
                "project_root": "/path/to/project/files"
            }
        ],
        "staff_id": 13,
        "staff_name": "adalovelace"
    }
]

问题

如何让Flask-JWT 将我的函数用作authenticate

【问题讨论】:

    标签: python flask flask-jwt


    【解决方案1】:

    Flask-JWT 已经过时并且已被废弃。查看 flask-jwt-extended 或 flask-jwt-simple 作为替代方案,它们设计得更好并且仍然可以维护(我是这些扩展的作者,所以我当然有偏见)。

    它们已设置好,因此您可以提供自己的端点,而不是让扩展程序为您管理端点。

    【讨论】:

    • 很高兴看到你回答@vimalloc :) 我已经在使用 flask-jwt-extended 作为解决方法。回到问题,那么flask-jwt中没有办法自定义token响应吗?
    • Iirc 您可以通过子类化和覆盖该方法或在导入后猴子修补 Flask-JWT 来做到这一点,但我认为没有一种简单的内置方式。也就是说,我使用那个库已经有一年了,所以我可能记错了。整个扩展是一个文件,因此查看它可能是您最好的选择。干杯。
    • 此外,flask-jwt-simple 在功能上更接近于 flask-jwt 然后是 flask-jwt-extended。它对 JWT 的内容没有意见,而扩展是(您可以完全控制 JWT 中的声明:flask-jwt-simple.readthedocs.io/en/latest/…)。这是一个较新的、不太知名的项目 atm,但它使用了支持 flask-jwt-extended 的所有经过实战测试的代码。如果您正在构建一个需要与其他 JWT 提供程序合作的应用程序,flask-jwt-simple 可能比 flask-jwt-extended(和 imo,flask-jwt)更好。祝你好运! :)
    猜你喜欢
    • 2019-03-17
    • 2019-11-20
    • 2023-01-22
    • 2020-06-26
    • 2019-02-07
    • 2019-08-19
    • 2017-02-20
    • 2017-01-19
    • 2020-04-01
    相关资源
    最近更新 更多