以下是在 Flask 中基于 token 实现的登录验证装饰器的示例代码:
import jwt
from functools import wraps
from flask import request, jsonify, current_app
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
token = request.headers.get('Authorization')
if not token:
return jsonify({'message': 'Missing token'}), 401
try:
data = jwt.decode(token, current_app.config['SECRET_KEY'], algorithms=['HS256'])
current_user = data['username']
except Exception as e:
return jsonify({'message': 'Invalid token'}), 401
return f(current_user, *args, **kwargs)
return decorated_function
该装饰器首先检查请求头中是否存在 Authorization 字段,并解码其中的 token。如果没有找到 token,则返回一个包含错误消息的 JSON 响应。如果找到了 token,则使用 JWT 对其进行解码,同时使用 Flask 的 current_app 对象获取 SECRET_KEY。如果解码成功,那么装饰器会将解码出来的用户名传递给被装饰函数。如果解码失败,则返回一个包含错误消息的 JSON 响应。可以在需要登录验证的视图函数上添加该装饰器,例如:
@app.route('/protected')
@login_required
def protected(current_user):
return jsonify({'message': 'This is a protected endpoint for user {}'.format(current_user)})
在上述代码中,protected 视图函数被 @login_required 装饰器进行修饰,当用户成功登录后,该视图函数会返回一个包含当前用户信息的 JSON 响应。需要注意的是,已经登录的用户才能访问该视图函数,否则将返回一个包含错误消息的 JSON 响应。文章来源:https://www.toymoban.com/news/detail-645141.html
不过以上内容中涉及了解密参数,如果token并未进行加密可以按照如下方式写:文章来源地址https://www.toymoban.com/news/detail-645141.html
from functools import wraps
from flask import request, jsonify
def login_required_token(f):
@functools.wraps(f)
def decorated_function(*args, **kwargs):
token = request.headers.get('Authorization')
if not token:
return jsonify({'message': 'Missing token'}), 401
return f(*args, **kwargs)
return decorated_function
@app.route('/logaudit/program/', methods=["POST"])
@login_required_token
def program_log():
# print("#"*50)
# print("current user is:",current_user)
return makeresponse("首页")
到了这里,关于flask处理token的装饰器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!