2025-05-12 00:19:35 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
|
|
|
|
|
|
|
|
use App\BaseApp\BaseController;
|
|
|
|
|
|
use App\Service\LoginService;
|
|
|
|
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
|
|
|
|
|
|
|
|
class LoginController extends BaseController
|
|
|
|
|
|
{
|
2026-08-14 23:21:21 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 登录控制器注册在免登录组里,继承来的 CRUD 会变成 /api/list、/api/create 这种
|
|
|
|
|
|
* 无需鉴权、指向 LoginService(根本没有这些方法)的路由,必须排除
|
|
|
|
|
|
*/
|
|
|
|
|
|
protected array $exceptRoute = ['list', 'option', 'detail', 'create', 'update', 'delete'];
|
2025-05-12 00:19:35 +08:00
|
|
|
|
|
|
|
|
|
|
public function __construct()
|
|
|
|
|
|
{
|
|
|
|
|
|
parent::__construct();
|
|
|
|
|
|
$this->service = LoginService::getInstance();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 登录
|
|
|
|
|
|
* @Method POST
|
|
|
|
|
|
* @return JsonResponse
|
|
|
|
|
|
* @throws \Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function login()
|
|
|
|
|
|
{
|
|
|
|
|
|
$this->insertField = [
|
2025-05-12 16:13:46 +08:00
|
|
|
|
'account', 'password'
|
2025-05-12 00:19:35 +08:00
|
|
|
|
];
|
|
|
|
|
|
$param = $this->checkRequiredFields(request()->post());
|
|
|
|
|
|
|
|
|
|
|
|
return jok(
|
2025-05-12 16:13:46 +08:00
|
|
|
|
$this->service->login($param['account'], $param['password']),
|
2025-05-12 00:19:35 +08:00
|
|
|
|
'登录成功'
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 注册
|
|
|
|
|
|
* @Method POST
|
|
|
|
|
|
* @return JsonResponse
|
|
|
|
|
|
* @throws \Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function register()
|
|
|
|
|
|
{
|
|
|
|
|
|
$this->insertField = [
|
2025-05-12 09:04:46 +08:00
|
|
|
|
'phone', 'password', 'email', 'code'
|
2025-05-12 00:19:35 +08:00
|
|
|
|
];
|
|
|
|
|
|
$param = $this->checkRequiredFields(request()->post());
|
|
|
|
|
|
|
|
|
|
|
|
return jok(
|
2025-05-12 09:04:46 +08:00
|
|
|
|
$this->service->register($param['phone'], $param['password'], $param['email'], $param['code']),
|
2025-05-12 00:19:35 +08:00
|
|
|
|
'登录成功'
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-08-14 23:21:21 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 退出登录
|
|
|
|
|
|
* @Method POST
|
|
|
|
|
|
* @throws \Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function logout(): JsonResponse
|
2025-05-12 16:13:46 +08:00
|
|
|
|
{
|
|
|
|
|
|
return jok(
|
2026-08-14 23:21:21 +08:00
|
|
|
|
$this->service->logout(),
|
2025-05-12 16:13:46 +08:00
|
|
|
|
'退出成功'
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-08-14 23:21:21 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 续签 token
|
|
|
|
|
|
*
|
|
|
|
|
|
* 前端拦截器在 401 时调用,此时 token 已过期,所以只能放在免登录组里,
|
|
|
|
|
|
* 由 LoginService::refresh 自己校验签名与 Redis 会话。
|
|
|
|
|
|
* @Method POST
|
|
|
|
|
|
* @throws \Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function refresh(): JsonResponse
|
2025-05-12 16:13:46 +08:00
|
|
|
|
{
|
|
|
|
|
|
return jok(
|
2026-08-14 23:21:21 +08:00
|
|
|
|
$this->service->refresh(),
|
|
|
|
|
|
'续签成功'
|
2025-05-12 16:13:46 +08:00
|
|
|
|
);
|
|
|
|
|
|
}
|
2025-05-12 00:19:35 +08:00
|
|
|
|
}
|