flask_jwt_extended
实现 JWT)。本文将简要介绍这两种方法的实现方式并提供对应的代码示例。Session
是一种基于服务器存储的认证机制。session_id
,并将其存储在客户端的 Cookie 中。session_id
来判断用户的身份。session_id
),服务器验证后允许访问受保护资源。from flask import Flask, session, redirect, url_for, request, jsonify
app = Flask(__name__)
app.secret_key = 'your_secret_key'
# 模拟用户数据
USER_DATA = {"test_user": "password123"}
# 登录接口
@app.route('/login', methods=['POST'])
def login():
data = request.json
username = data.get('username')
password = data.get('password')
if username in USER_DATA and USER_DATA[username] == password:
session['username'] = username # 创建会话
return jsonify({"message": "Login successful"}), 200
return jsonify({"message": "Invalid credentials"}), 401
# 受保护资源
@app.route('/protected', methods=['GET'])
def protected():
if 'username' in session:
username = session['username']
return jsonify({"message": f"Welcome {session['username']}!"}), 200
return jsonify({"message": "Unauthorized"}), 401
# 登出接口
@app.route('/logout', methods=['POST'])
def logout():
session.pop('username', None) # 清除会话
return jsonify({"message": "Logout successful"}), 200
if __name__ == '__main__':
app.run(debug=True)
Token
认证 是一种基于客户端的认证机制,通常使用 JSON Web Token (JWT)。from flask import Flask, jsonify, request
from flask_jwt_extended import JWTManager, create_access_token, jwt_required, get_jwt_identity
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'your_jwt_secret_key'
jwt = JWTManager(app)
# 模拟用户数据
USER_DATA = {"test_user": "password123"}
# 登录接口
@app.route('/login', methods=['POST'])
def login():
data = request.json
username = data.get('username')
password = data.get('password')
if username in USER_DATA and USER_DATA[username] == password:
access_token = create_access_token(identity=username) # 创建 JWT
return jsonify(access_token=access_token), 200
return jsonify({"message": "Invalid credentials"}), 401
# 受保护资源
@app.route('/protected', methods=['GET'])
@jwt_required() # 验证 JWT
def protected():
current_user = get_jwt_identity()
return jsonify({"message": f"Welcome {current_user}!"}), 200
if __name__ == '__main__':
app.run(debug=True)
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。
🧠 作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。
💡 在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。
🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。