56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
from flask import request, jsonify
|
|
from flask_jwt_extended import create_access_token
|
|
from . import api_bp
|
|
from ..models import User
|
|
from ..schemas import UserCreateSchema
|
|
from ..services import AuthService
|
|
|
|
|
|
user_create_schema = UserCreateSchema()
|
|
|
|
|
|
@api_bp.route("/auth/register", methods=["POST"])
|
|
def register():
|
|
data = request.get_json()
|
|
errors = user_create_schema.validate(data)
|
|
if errors:
|
|
return jsonify({"error": errors}), 400
|
|
|
|
try:
|
|
user = AuthService.register(
|
|
data["username"], data["password"], data.get("email")
|
|
)
|
|
access_token = create_access_token(identity=user.id)
|
|
return jsonify(
|
|
{
|
|
"message": "注册成功",
|
|
"user": user.to_dict(),
|
|
"access_token": access_token,
|
|
}
|
|
), 201
|
|
except ValueError as e:
|
|
return jsonify({"error": str(e)}), 400
|
|
|
|
|
|
@api_bp.route("/auth/login", methods=["POST"])
|
|
def login():
|
|
data = request.get_json()
|
|
username = data.get("username")
|
|
password = data.get("password")
|
|
|
|
if not username or not password:
|
|
return jsonify({"error": "用户名和密码不能为空"}), 400
|
|
|
|
try:
|
|
user = AuthService.login(username, password)
|
|
access_token = create_access_token(identity=user.id)
|
|
return jsonify(
|
|
{
|
|
"message": "登录成功",
|
|
"user": user.to_dict(),
|
|
"access_token": access_token,
|
|
}
|
|
), 200
|
|
except ValueError as e:
|
|
return jsonify({"error": str(e)}), 401
|