data = jwt.decode(token, app.config['SECRET\_KEY'])
except:
return jsonify({'message': 'Token is invalid!'}), 403
return f(\*args, \*\*kwargs)
return decorated
登录路由
@app.route(‘/login’)
def login():
auth = request.authorization
if auth and auth.username in users and users[auth.username] == auth.password:
token = jwt.encode({'username': auth.username}, app.config['SECRET\_KEY'])
return jsonify({'token': token.decode('UTF-8')})
return jsonify({'message': 'Authentication failed!'}), 401
受保护的路由
@app.route(‘/protected’)
@token_required
def protected():
return jsonify({‘message’: ‘Protected resource!’})
if name == ‘__main__’:
app.run()
在上面的示例中,我们首先导入所需的库,并设置了用于签名JWT的密钥。然后,我们模拟了一个简单的用户数据库,并创建了一个装饰器`token_required`,用于验证JWT令牌。接着,我们定义了两个路由:`/login`用于登录并生成JWT令牌,`/protected`是一个受保护的资源,需要提供有效的JWT令牌才能访问。
#### 进一步示例代码
##### 用户管理
在用户管理方面,我们可以扩展我们的示例代码以支持用户注册、管理和密码重置。下面是一个简单的示例:
用户数据库
users = {
‘username’: {‘password’: ‘hashed_password’, ‘email’: ‘user@example.com’}
}
注册路由
@app.route(‘/register’, methods=[‘POST’])
def register():
data = request.get_json()
username = data.get(‘username’)
password = data.get(‘password’)
email = data.get(‘email’)
if username in users:
return jsonify({'message': 'Username already exists!'}), 400
# 在实际应用中,密码应该进行哈希处理,以增加安全性
users[username] = {'password': password, 'email': email}
return jsonify({'message': 'User registered successfully!'}), 201
##### 令牌刷新
为了实现令牌刷新机制,我们可以添加一个额外的路由来接受令