自定义 Flask-JWT 认证功能
Customizing the Flask-JWT authenticate function
在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
?
Flask-JWT 很旧,已经被废弃了。查看 flask-jwt-extended 或 flask-jwt-simple 作为替代方案,它们设计得更好并且仍然得到维护(我是这些扩展的作者,所以我当然有偏见)。
它们的设置让您提供自己的端点,而不是让扩展程序为您管理端点。
在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
?
Flask-JWT 很旧,已经被废弃了。查看 flask-jwt-extended 或 flask-jwt-simple 作为替代方案,它们设计得更好并且仍然得到维护(我是这些扩展的作者,所以我当然有偏见)。
它们的设置让您提供自己的端点,而不是让扩展程序为您管理端点。