Flask-JWT 使用教程

Flask-JWT 使用教程

项目介绍

Flask-JWT 是一个为 Flask 应用添加 JSON Web Token (JWT) 认证功能的扩展。它提供了一种简单的方式来保护你的 Flask 路由,确保只有携带有效 JWT 的用户才能访问受保护的资源。Flask-JWT 的核心功能包括生成 JWT、验证 JWT 以及在请求中使用 JWT。

项目快速启动

安装

首先,你需要通过 pip 安装 Flask-JWT:

pip install Flask-JWT

基本配置

以下是一个基本的 Flask 应用配置示例,展示了如何使用 Flask-JWT:

from flask import Flask
from flask_jwt import JWT, jwt_required, current_identity
from werkzeug.security import safe_str_cmp

class User(object):
    def __init__(self, id, username, password):
        self.id = id
        self.username = username
        self.password = password

    def __str__(self):
        return "User(id='%s')" % self.id

users = [
    User(1, 'user1', 'abcxyz'),
    User(2, 'user2', 'abcxyz')
]

username_table = {u.username: u for u in users}
userid_table = {u.id: u for u in users}

def authenticate(username, password):
    user = username_table.get(username, None)
    if user and safe_str_cmp(user.password.encode('utf-8'), password.encode('utf-8')):
        return user

def identity(payload):
    user_id = payload['identity']
    return userid_table.get(user_id, None)

app = Flask(__name__)
app.config['SECRET_KEY'] = 'super-secret'

jwt = JWT(app, authenticate, identity)

@app.route('/protected')
@jwt_required()
def protected():
    return '%s' % current_identity

if __name__ == '__main__':
    app.run()

应用案例和最佳实践

保护路由

使用 @jwt_required() 装饰器可以保护你的 Flask 路由,确保只有携带有效 JWT 的用户才能访问:

@app.route('/protected')
@jwt_required()
def protected():
    return jsonify(logged_in_as=current_identity.username)

生成 JWT

你可以通过 create_access_token() 函数生成 JWT:

from flask_jwt_extended import create_access_token

@app.route('/login', methods=['POST'])
def login():
    username = request.json.get('username', None)
    password = request.json.get('password', None)
    user = authenticate(username, password)
    if user:
        access_token = create_access_token(identity=user.id)
        return jsonify(access_token=access_token)
    else:
        return jsonify({"msg": "Bad username or password"}), 401

典型生态项目

Flask-JWT-Extended

Flask-JWT-Extended 是 Flask-JWT 的一个扩展,提供了更多高级功能,如刷新令牌、令牌撤销、部分保护路由等。如果你需要更复杂的 JWT 功能,可以考虑使用 Flask-JWT-Extended。

Flask-Security

Flask-Security 是一个综合性的安全扩展,提供了用户认证、授权、密码加密等功能。它集成了 Flask-JWT,可以方便地为你的 Flask 应用添加安全特性。

通过以上内容,你应该能够快速上手并使用 Flask-JWT 来保护你的 Flask 应用。希望这篇教程对你有所帮助!

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值