60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
|
|
from flask import Blueprint, request, jsonify
|
||
|
|
from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity
|
||
|
|
from models import User
|
||
|
|
from app import db
|
||
|
|
|
||
|
|
auth_bp = Blueprint('auth', __name__)
|
||
|
|
|
||
|
|
@auth_bp.route('/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({'message': '用户名和密码不能为空'}), 400
|
||
|
|
|
||
|
|
user = User.query.filter_by(username=username).first()
|
||
|
|
|
||
|
|
if user and user.check_password(password):
|
||
|
|
if user.status != 'active':
|
||
|
|
return jsonify({'message': '账户已被禁用'}), 403
|
||
|
|
|
||
|
|
access_token = create_access_token(identity=user.id)
|
||
|
|
return jsonify({
|
||
|
|
'token': access_token,
|
||
|
|
'user': {
|
||
|
|
'id': user.id,
|
||
|
|
'username': user.username,
|
||
|
|
'realName': user.real_name,
|
||
|
|
'role': user.role,
|
||
|
|
'permissions': user.get_permissions()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
return jsonify({'message': '用户名或密码错误'}), 401
|
||
|
|
|
||
|
|
@auth_bp.route('/logout', methods=['POST'])
|
||
|
|
@jwt_required()
|
||
|
|
def logout():
|
||
|
|
return jsonify({'message': '退出登录成功'})
|
||
|
|
|
||
|
|
@auth_bp.route('/profile', methods=['GET'])
|
||
|
|
@jwt_required()
|
||
|
|
def profile():
|
||
|
|
user_id = get_jwt_identity()
|
||
|
|
user = User.query.get(user_id)
|
||
|
|
|
||
|
|
if not user:
|
||
|
|
return jsonify({'message': '用户不存在'}), 404
|
||
|
|
|
||
|
|
return jsonify({
|
||
|
|
'user': {
|
||
|
|
'id': user.id,
|
||
|
|
'username': user.username,
|
||
|
|
'realName': user.real_name,
|
||
|
|
'email': user.email,
|
||
|
|
'role': user.role,
|
||
|
|
'permissions': user.get_permissions()
|
||
|
|
}
|
||
|
|
})
|