如果使用 Flask-jwt-extended 在请求中未显示 jwt,如何重定向
How to redirect if jwt is not presented in the request using Flask-jwt-extended
如果用户没有使用 JWT 或使用了错误的 JWT,是否有一种内置的方法可以重定向到登录页面?
@api.route('/private', methods=['GET'])
@jwt_required()
def protected():
logged = get_jwt_identity()
return jsonify(logged_in=logged), 200
最简单的解决方案可能是通过 unauthorized_loader
更改不存在令牌时的行为。类似于:
@jwt.unauthorized_loader
def custom_unauthorized_response(_err):
return redirect(url_for('login'))
如果您需要更细粒度的控制,可以将 before_request
与 verify_jwt_in_request()
结合使用。或者创建您自己的自定义装饰器,例如:
def jwt_or_redirect():
def wrapper(fn):
@wraps(fn)
def decorator(*args, **kwargs):
verify_jwt_in_request(optional=True)
if not get_jwt_identity():
return redirect(url_for('login'))
else:
return fn(*args, **kwargs)
return decorator
return wrapper
如果用户没有使用 JWT 或使用了错误的 JWT,是否有一种内置的方法可以重定向到登录页面?
@api.route('/private', methods=['GET'])
@jwt_required()
def protected():
logged = get_jwt_identity()
return jsonify(logged_in=logged), 200
最简单的解决方案可能是通过 unauthorized_loader
更改不存在令牌时的行为。类似于:
@jwt.unauthorized_loader
def custom_unauthorized_response(_err):
return redirect(url_for('login'))
如果您需要更细粒度的控制,可以将 before_request
与 verify_jwt_in_request()
结合使用。或者创建您自己的自定义装饰器,例如:
def jwt_or_redirect():
def wrapper(fn):
@wraps(fn)
def decorator(*args, **kwargs):
verify_jwt_in_request(optional=True)
if not get_jwt_identity():
return redirect(url_for('login'))
else:
return fn(*args, **kwargs)
return decorator
return wrapper