2025-04-15 15:16:58 +08:00

71 lines
1.9 KiB
Python

from ninja import Router, Form
from django.contrib.auth import get_user_model
from rest_framework_simplejwt.tokens import RefreshToken
from django.db.models import Q
auth_router = Router(tags=["认证"])
User = get_user_model()
@auth_router.post("/register")
def register(
request,
username: str = Form(...),
password: str = Form(...),
email: str = Form(...),
role: str = Form("user") # 可选:默认 user
):
if User.objects.filter(username=username).exists():
return {"success": False, "message": "用户名已存在"}
if role != "user":
return {"success": False, "message": "不能注册管理员或分管理账号"}
user = User(username=username, email=email, role=role)
user.set_password(password)
user.save()
refresh = RefreshToken.for_user(user)
return {
"success": True,
"message": "注册成功",
"user": {
"id": user.id,
"username": user.username,
"role": user.role,
},
"token": {
"access": str(refresh.access_token),
"refresh": str(refresh),
}
}
@auth_router.post("/login")
def login(
request,
username: str = Form(...),
password: str = Form(...),
):
user = User.objects.filter(Q(username=username) | Q(email=username)).first()
if not user or not user.check_password(password):
return {"success": False, "message": "用户名或密码错误"}
if not user.is_active:
return {"success": False, "message": "账号未激活"}
refresh = RefreshToken.for_user(user)
return {
"success": True,
"message": "登录成功",
"user": {
"id": user.id,
"username": user.username,
"role": user.role,
},
"token": {
"access": str(refresh.access_token),
"refresh": str(refresh),
}
}