Files
c/backend/app/routes/auth_routes.py
刘正航 b5237f9038 1
2026-04-21 22:45:19 +08:00

68 lines
1.9 KiB
Python

from flask import Blueprint, request
from flask_jwt_extended import create_access_token, jwt_required
from app.extensions import db
from app.models import User
from app.utils.auth import current_user
from app.utils.response import fail, ok
auth_bp = Blueprint("auth", __name__)
@auth_bp.post("/register")
def register():
payload = request.get_json(silent=True) or {}
username = (payload.get("username") or "").strip()
password = payload.get("password") or ""
nickname = (payload.get("nickname") or username).strip()
if len(username) < 3:
return fail("用户名至少3位", 400)
if len(password) < 6:
return fail("密码至少6位", 400)
if User.query.filter_by(username=username).first():
return fail("用户名已存在", 409)
user = User(
username=username,
nickname=nickname or username,
company=(payload.get("company") or "").strip(),
title=(payload.get("title") or "").strip(),
phone=(payload.get("phone") or "").strip(),
is_admin=bool(payload.get("is_admin", False)),
)
user.set_password(password)
db.session.add(user)
db.session.commit()
return ok(user.to_dict(), "注册成功")
@auth_bp.post("/login")
def login():
payload = request.get_json(silent=True) or {}
username = (payload.get("username") or "").strip()
password = payload.get("password") or ""
user = User.query.filter_by(username=username).first()
if not user or not user.check_password(password):
return fail("用户名或密码错误", 401)
access_token = create_access_token(
identity=str(user.id),
additional_claims={"is_admin": bool(user.is_admin), "username": user.username},
)
return ok({"token": access_token, "user": user.to_dict()}, "登录成功")
@auth_bp.get("/me")
@jwt_required()
def me():
user = current_user()
if not user:
return fail("用户不存在", 404)
return ok(user.to_dict())