介绍下flask-jwt,并给出示例
时间: 2023-07-12 07:42:37 浏览: 71
Flask-JWT是一个用于Flask框架的扩展程序,提供了对JSON Web Tokens(JWT)认证和授权的支持。JWT是一种用于安全通信的令牌,可以在客户端和服务器之间传递信息,同时确保信息的安全性和完整性。
以下是一个使用Flask-JWT的示例代码:
```python
from flask import Flask
from flask_jwt import JWT, jwt_required, current_identity
from werkzeug.security import safe_str_cmp
app = Flask(__name__)
app.config['SECRET_KEY'] = 'super-secret'
class User(object):
def __init__(self, id, username, password):
self.id = id
self.username = username
self.password = password
def __str__(self):
return f"User(id='{self.id}', username='{self.username}')"
users = [
User(1, 'user1', 'password1'),
User(2, 'user2', 'password2'),
]
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)
jwt = JWT(app, authenticate, identity)
@app.route('/protected')
@jwt_required()
def protected():
return f'Hello, {current_identity}!'
if __name__ == '__main__':
app.run(debug=True)
```
这个示例代码创建了一个基本的Flask应用,并使用Flask-JWT来实现JWT认证和授权。在示例中,我们创建了两个用户,并将其存储在`users`列表中。然后我们实现了`authenticate`和`identity`函数,用于验证用户身份和返回用户对象。
在应用中,我们使用`@jwt_required`装饰器来保护`/protected`端点,确保只有经过身份验证的用户才能访问。当用户尝试访问`/protected`端点时,Flask-JWT会自动验证JWT并将用户对象存储在`current_identity`变量中,我们可以在函数中使用它来访问当前用户的信息。
运行应用后,可以使用JWT令牌来访问`/protected`端点,如:
```
$ curl -H "Authorization: JWT <your_token>" http://localhost:5000/protected
```
其中`<your_token>`应替换为实际的JWT令牌。