新增api应用模块
This commit is contained in:
@@ -0,0 +1,176 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\api\controller;
|
||||
|
||||
use app\api\BaseController;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\Cache;
|
||||
use think\response\Json;
|
||||
use app\service\JwtService;
|
||||
|
||||
use app\model\AdminUser;
|
||||
use app\model\System\SystemSiteSettings;
|
||||
|
||||
class LoginController extends BaseController
|
||||
{
|
||||
private function generateToken($userInfo): string
|
||||
{
|
||||
return JwtService::generateToken($userInfo);
|
||||
}
|
||||
|
||||
private function verifyToken($token): ?array
|
||||
{
|
||||
return JwtService::verifyToken($token);
|
||||
}
|
||||
|
||||
/**
|
||||
* 登录接口
|
||||
* @return Json
|
||||
*/
|
||||
public function login(): Json
|
||||
{
|
||||
$data = $this->request->param();
|
||||
|
||||
if (isset($data['email'])) {
|
||||
$data['account'] = $data['email'];
|
||||
} elseif (isset($data['phone'])) {
|
||||
$data['account'] = $data['phone'];
|
||||
}
|
||||
|
||||
try {
|
||||
$this->validate($data, [
|
||||
'account|账号' => 'require|length:3,32',
|
||||
'password|密码' => 'require|length:6,32'
|
||||
]);
|
||||
} catch (ValidateException $e) {
|
||||
return json([
|
||||
'code' => 400,
|
||||
'msg' => $e->getError()
|
||||
]);
|
||||
}
|
||||
|
||||
$user = AdminUser::where('account', $data['account'])
|
||||
->where('status', 1)
|
||||
->where('delete_time', null)
|
||||
->find();
|
||||
|
||||
if (!$user) {
|
||||
return json([
|
||||
'code' => 401,
|
||||
'msg' => '账号不存在或已禁用'
|
||||
]);
|
||||
}
|
||||
|
||||
if (md5($data['password']) !== $user['password']) {
|
||||
return json([
|
||||
'code' => 401,
|
||||
'msg' => '密码错误'
|
||||
]);
|
||||
}
|
||||
|
||||
AdminUser::where('id', $user['id'])->update([
|
||||
'login_count' => $user['login_count'] + 1,
|
||||
'last_login_ip' => $this->request->ip()
|
||||
]);
|
||||
|
||||
$userInfo = [
|
||||
'id' => $user['id'],
|
||||
'account' => $user['account'],
|
||||
'name' => $user['name'],
|
||||
'group_id' => $user['group_id']
|
||||
];
|
||||
|
||||
$token = $this->generateToken($userInfo);
|
||||
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => '登录成功',
|
||||
'data' => [
|
||||
'token' => $token,
|
||||
'user' => $userInfo
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 退出登录
|
||||
* @return Json
|
||||
*/
|
||||
public function logout(): Json
|
||||
{
|
||||
$authHeader = $this->request->header('Authorization', '');
|
||||
$userInfo = null;
|
||||
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => '退出成功'
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前登录用户信息
|
||||
* @return Json
|
||||
*/
|
||||
public function userInfo(): Json
|
||||
{
|
||||
$authHeader = $this->request->header('Authorization', '');
|
||||
|
||||
if (!preg_match('/Bearer\s+(.+)/i', $authHeader, $matches)) {
|
||||
return json([
|
||||
'code' => 401,
|
||||
'msg' => '未登录'
|
||||
]);
|
||||
}
|
||||
|
||||
$tokenData = $this->verifyToken($matches[1]);
|
||||
|
||||
if (!$tokenData || !isset($tokenData['user'])) {
|
||||
return json([
|
||||
'code' => 401,
|
||||
'msg' => 'Token无效'
|
||||
]);
|
||||
}
|
||||
|
||||
$user = (array)$tokenData['user'];
|
||||
$user_id = $user['id'];
|
||||
|
||||
$userData = AdminUser::where('id', $user_id)
|
||||
->where('delete_time', null)
|
||||
->field('id, account, name, phone, qq, sex, group_id, status, create_time, update_time')
|
||||
->find();
|
||||
|
||||
if (!$userData) {
|
||||
return json([
|
||||
'code' => 404,
|
||||
'msg' => '用户不存在'
|
||||
]);
|
||||
}
|
||||
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => '获取成功',
|
||||
'data' => $userData->toArray()
|
||||
]);
|
||||
}
|
||||
|
||||
public function getAdminUserFromToken(): array
|
||||
{
|
||||
return JwtService::getUserFromHeader($this->request->header('Authorization', ''));
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function loginInfo()
|
||||
{
|
||||
|
||||
$loginInfo = SystemSiteSettings::select();
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => '获取成功',
|
||||
'data' => $loginInfo
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user