Files
pear-admin-flask/applications/api/passport.py
T

55 lines
2.0 KiB
Python

from flask import session, redirect, url_for, request
from flask_login import current_user, login_user
from flask_restful import Resource, reqparse, Api
from applications.api import api_bp
from applications.common.admin_log import login_log
from applications.common.gen_captcha import add_auth_session
from applications.common.utils.http import fail_api, success_api
from applications.models import User
from flask import render_template, make_response
passport_api = Api(api_bp, prefix='/passport')
@passport_api.resource('/login')
class Login(Resource):
login_req = reqparse.RequestParser(bundle_errors=True)
login_req.add_argument('username', type=str, help='请输入用户名', required=True)
login_req.add_argument('password', type=str, help='请输入密码', required=True)
login_req.add_argument('captcha', type=str, help='请输入验证码', required=True)
def get(self):
if current_user.is_authenticated:
return redirect(url_for('admin.index'))
# TODO 分离视图操作 最终实现接口登录与视图登录两套逻辑
return make_response(render_template('index/login.html'))
def post(self):
req = self.login_req.parse_args()
s_code = session.get("code", None)
if req.captcha != s_code:
return fail_api(msg="验证码错误")
user = User.query.filter_by(username=req.username).first()
if user is None:
return fail_api(msg="不存在的用户")
if user.enable == 0:
return fail_api(msg="用户被暂停使用")
if user.validate_password(req.password):
# 登录
login_user(user)
# 记录登录日志
login_log(request, uid=user.id, is_access=True)
# 存入权限
add_auth_session()
return success_api(msg="登录成功")
login_log(request, uid=user.id, is_access=False)
return fail_api(msg="用户名或密码错误")