104 lines
2.8 KiB
Python
104 lines
2.8 KiB
Python
![]() |
# apps/accounts/services/auth_service.py
|
||
|
from django.contrib.auth import authenticate
|
||
|
from django.core.exceptions import ValidationError
|
||
|
from django.core.validators import validate_email
|
||
|
from rest_framework.authtoken.models import Token
|
||
|
from apps.accounts.models import User
|
||
|
import logging
|
||
|
|
||
|
logger = logging.getLogger(__name__)
|
||
|
|
||
|
def authenticate_user(request, username, password):
|
||
|
"""验证用户身份"""
|
||
|
return authenticate(request, username=username, password=password)
|
||
|
|
||
|
def create_user(data):
|
||
|
"""创建用户"""
|
||
|
required_fields = ['username', 'password', 'email', 'role', 'name']
|
||
|
for field in required_fields:
|
||
|
if not data.get(field):
|
||
|
return {
|
||
|
"code": 400,
|
||
|
"message": f"缺少必填字段: {field}",
|
||
|
"data": None,
|
||
|
"status": 400
|
||
|
}
|
||
|
|
||
|
valid_roles = ['admin', 'leader', 'member']
|
||
|
if data['role'] not in valid_roles:
|
||
|
return {
|
||
|
"code": 400,
|
||
|
"message": f"无效的角色,必须是: {', '.join(valid_roles)}",
|
||
|
"data": None,
|
||
|
"status": 400
|
||
|
}
|
||
|
|
||
|
if User.objects.filter(username=data['username']).exists():
|
||
|
return {
|
||
|
"code": 400,
|
||
|
"message": "用户名已存在",
|
||
|
"data": None,
|
||
|
"status": 400
|
||
|
}
|
||
|
|
||
|
if User.objects.filter(email=data['email']).exists():
|
||
|
return {
|
||
|
"code": 400,
|
||
|
"message": "邮箱已被注册",
|
||
|
"data": None,
|
||
|
"status": 400
|
||
|
}
|
||
|
|
||
|
if len(data['password']) < 8:
|
||
|
return {
|
||
|
"code": 400,
|
||
|
"message": "密码长度必须至少为8位",
|
||
|
"data": None,
|
||
|
"status": 400
|
||
|
}
|
||
|
|
||
|
try:
|
||
|
validate_email(data['email'])
|
||
|
except ValidationError:
|
||
|
return {
|
||
|
"code": 400,
|
||
|
"message": "邮箱格式不正确",
|
||
|
"data": None,
|
||
|
"status": 400
|
||
|
}
|
||
|
|
||
|
try:
|
||
|
user = User.objects.create_user(
|
||
|
username=data['username'],
|
||
|
email=data['email'],
|
||
|
password=data['password'],
|
||
|
role=data['role'],
|
||
|
department=data.get('department'),
|
||
|
name=data['name'],
|
||
|
group=data.get('group'),
|
||
|
is_staff=False,
|
||
|
is_superuser=False
|
||
|
)
|
||
|
return user
|
||
|
except Exception as e:
|
||
|
logger.error(f"创建用户失败: {str(e)}")
|
||
|
return {
|
||
|
"code": 500,
|
||
|
"message": f"创建用户失败: {str(e)}",
|
||
|
"data": None,
|
||
|
"status": 500
|
||
|
}
|
||
|
|
||
|
def generate_token(user):
|
||
|
"""生成或获取用户token"""
|
||
|
token, _ = Token.objects.get_or_create(user=user)
|
||
|
return token.key
|
||
|
|
||
|
def delete_token(user):
|
||
|
"""删除用户token"""
|
||
|
try:
|
||
|
user.auth_token.delete()
|
||
|
except Token.DoesNotExist:
|
||
|
pass
|
||
|
|
||
|
|