mirror of
https://gitee.com/wonderful-code/buildadmin
synced 2024-11-22 15:24:09 +00:00
95 lines
3.3 KiB
PHP
95 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace app\api\controller;
|
|
|
|
use Throwable;
|
|
use ba\Captcha;
|
|
use ba\ClickCaptcha;
|
|
use think\facade\Config;
|
|
use app\common\facade\Token;
|
|
use app\common\controller\Frontend;
|
|
use app\api\validate\User as UserValidate;
|
|
|
|
class User extends Frontend
|
|
{
|
|
protected array $noNeedLogin = ['checkIn', 'logout'];
|
|
|
|
protected array $noNeedPermission = ['index'];
|
|
|
|
public function initialize(): void
|
|
{
|
|
parent::initialize();
|
|
}
|
|
|
|
/**
|
|
* 会员签入(登录和注册)
|
|
* @throws Throwable
|
|
*/
|
|
public function checkIn(): void
|
|
{
|
|
$openMemberCenter = Config::get('buildadmin.open_member_center');
|
|
if (!$openMemberCenter) {
|
|
$this->error(__('Member center disabled'));
|
|
}
|
|
|
|
// 检查登录态
|
|
if ($this->auth->isLogin()) {
|
|
$this->success(__('You have already logged in. There is no need to log in again~'), [
|
|
'type' => $this->auth::LOGGED_IN
|
|
], $this->auth::LOGIN_RESPONSE_CODE);
|
|
}
|
|
|
|
if ($this->request->isPost()) {
|
|
$params = $this->request->post(['tab', 'email', 'mobile', 'username', 'password', 'keep', 'captcha', 'captchaId', 'captchaInfo', 'registerType']);
|
|
if (!in_array($params['tab'], ['login', 'register'])) {
|
|
$this->error(__('Unknown operation'));
|
|
}
|
|
|
|
$validate = new UserValidate();
|
|
try {
|
|
$validate->scene($params['tab'])->check($params);
|
|
} catch (Throwable $e) {
|
|
$this->error($e->getMessage());
|
|
}
|
|
|
|
if ($params['tab'] == 'login') {
|
|
$captchaObj = new ClickCaptcha();
|
|
if (!$captchaObj->check($params['captchaId'], $params['captchaInfo'])) {
|
|
$this->error(__('Captcha error'));
|
|
}
|
|
$res = $this->auth->login($params['username'], $params['password'], (bool)$params['keep']);
|
|
} elseif ($params['tab'] == 'register') {
|
|
$captchaObj = new Captcha();
|
|
if (!$captchaObj->check($params['captcha'], ($params['registerType'] == 'email' ? $params['email'] : $params['mobile']) . 'user_register')) {
|
|
$this->error(__('Please enter the correct verification code'));
|
|
}
|
|
$res = $this->auth->register($params['username'], $params['password'], $params['mobile'], $params['email']);
|
|
}
|
|
|
|
if (isset($res) && $res === true) {
|
|
$this->success(__('Login succeeded!'), [
|
|
'userInfo' => $this->auth->getUserInfo(),
|
|
'routePath' => '/user'
|
|
]);
|
|
} else {
|
|
$msg = $this->auth->getError();
|
|
$msg = $msg ?: __('Check in failed, please try again or contact the website administrator~');
|
|
$this->error($msg);
|
|
}
|
|
}
|
|
|
|
$this->success('', [
|
|
'accountVerificationType' => get_account_verification_type()
|
|
]);
|
|
}
|
|
|
|
public function logout(): void
|
|
{
|
|
if ($this->request->isPost()) {
|
|
$refreshToken = $this->request->post('refreshToken', '');
|
|
if ($refreshToken) Token::delete((string)$refreshToken);
|
|
$this->auth->logout();
|
|
$this->success();
|
|
}
|
|
}
|
|
} |