feature: 登录&权限拦截

This commit is contained in:
zhengxinonly
2023-10-01 23:42:59 +08:00
parent 8765b2c344
commit 69a4955ce2
6 changed files with 86 additions and 46 deletions
+42 -2
View File
@@ -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
+11
View File
@@ -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")
+3
View File
@@ -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")