Flask服务JWT Demo
依赖环境
toml
[tool.poetry.dependencies]
python = "^3.8"
Flask = "^2.1.1"
Flask-RESTful = "^0.3.9"
Flask-Cors = "^3.0.10"
Flask-JWT-Extended = "^4.3.1"
代码
python
from flask import Flask
from flask_restful import Api
from flask_cors import CORS
from flask_jwt_extended import JWTManager
from datetime import timedelta
from handlers.auth import Login
from handlers.index import Index
app = Flask(__name__)
app.config["JWT_SECRET_KEY"] = 'MY2022&token'
app.config["JWT_COOKIE_SECURE"] = False
app.config["JWT_BLACKLIST_ENABLED"] = True
app.config["JWT_BLACKLIST_TOKEN_CHECKS"] = ['access', 'refresh']
app.config["JWT_ACCESS_TOKEN_EXPIRES"] = timedelta(days=7)
jwt = JWTManager(app)
api = Api(app)
cors = CORS(app, resources={"*": {"origins": "*"}}, supports_credentials=True)
api.add_resource(Login, '/login')
api.add_resource(Index, '/index')
if __name__ == '__main__':
app.run()
python
from flask import request
from flask_restful import Resource
from flask_jwt_extended import create_access_token
from auth.auth import UserModel
user_model = UserModel()
class Login(Resource):
def post(self):
try:
payload_data = request.json
username = payload_data.get('username')
password = payload_data.get('password')
user = user_model.find_by_username(username)
if user and user_model.check_password(user, password):
access_token = create_access_token(identity=user, fresh=True)
return dict(code=1, message="ok", data=dict(
access_token=access_token
)), 200
else:
return dict(code=0, message="error auth", data=None), 200
except:
return dict(code=0, message="error params", data=None), 404
python
from flask_restful import Resource
from flask_jwt_extended import jwt_required
class Index(Resource):
@jwt_required()
def get(self):
return dict(
status=200,
msg="ok",
data="ok"
)