feature: 登录&权限拦截
This commit is contained in:
@@ -1,8 +1,48 @@
|
||||
from flask import Blueprint
|
||||
from flask import Blueprint, make_response, redirect, request
|
||||
from flask_jwt_extended import (
|
||||
create_access_token,
|
||||
create_refresh_token,
|
||||
jwt_required,
|
||||
set_access_cookies,
|
||||
set_refresh_cookies,
|
||||
unset_access_cookies,
|
||||
unset_refresh_cookies,
|
||||
)
|
||||
|
||||
from pear_admin.extensions import db
|
||||
from pear_admin.orms import UserORM
|
||||
|
||||
passport_api = Blueprint("passport", __name__)
|
||||
|
||||
|
||||
@passport_api.post("/login")
|
||||
def login_in():
|
||||
return {"message": "登录成功", "code": 0}
|
||||
data = request.get_json()
|
||||
|
||||
user: UserORM = db.session.execute(
|
||||
db.select(UserORM).where(UserORM.username == data["username"])
|
||||
).scalar()
|
||||
|
||||
if not user:
|
||||
return {"message": "用户不存在", "code": -1}, 401
|
||||
if user.check_password(data["password"]):
|
||||
return {"message": "用户密码错误", "code": -1}, 401
|
||||
|
||||
access_token = create_access_token(user)
|
||||
refresh_token = create_refresh_token(user)
|
||||
|
||||
response = make_response({"code": 0, "message": "登录成功"})
|
||||
|
||||
set_access_cookies(response, access_token)
|
||||
set_refresh_cookies(response, refresh_token)
|
||||
|
||||
return response
|
||||
|
||||
|
||||
@passport_api.route("/logout", methods=["GET", "POST"])
|
||||
@jwt_required()
|
||||
def logout():
|
||||
response = make_response(redirect("/login"))
|
||||
unset_access_cookies(response)
|
||||
unset_refresh_cookies(response)
|
||||
return response
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from flask import redirect
|
||||
from flask_jwt_extended import JWTManager
|
||||
|
||||
from pear_admin.orms.user import UserORM
|
||||
@@ -14,3 +15,13 @@ def user_identity_lookup(user):
|
||||
def user_lookup_callback(_jwt_header, jwt_data):
|
||||
identity = jwt_data["sub"]
|
||||
return UserORM.query.filter_by(id=identity).one_or_none()
|
||||
|
||||
|
||||
@jwt.expired_token_loader
|
||||
def expired_token_callback():
|
||||
return redirect("/login")
|
||||
|
||||
|
||||
@jwt.unauthorized_loader
|
||||
def missing_token_callback(error):
|
||||
return redirect("/login")
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
from flask import Blueprint, render_template
|
||||
from flask_jwt_extended import jwt_required
|
||||
|
||||
index_bp = Blueprint("index", __name__)
|
||||
|
||||
|
||||
@index_bp.route("/")
|
||||
@jwt_required()
|
||||
def index():
|
||||
return render_template("index.html")
|
||||
|
||||
|
||||
@index_bp.route("/login.html")
|
||||
@index_bp.route("/login")
|
||||
def login():
|
||||
return render_template("login.html")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user