122 lines
4.0 KiB
PHP
122 lines
4.0 KiB
PHP
|
<?php
|
|||
|
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
// | Author: CRMEB Team <admin@crmeb.com>
|
|||
|
// +----------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
namespace app\controller\merchant\system\admin;
|
|||
|
|
|||
|
|
|||
|
use crmeb\basic\BaseController;
|
|||
|
use app\common\repositories\system\merchant\MerchantAdminRepository;
|
|||
|
use app\validate\admin\LoginValidate;
|
|||
|
use crmeb\services\SwooleTaskService;
|
|||
|
use Gregwar\Captcha\CaptchaBuilder;
|
|||
|
use Gregwar\Captcha\PhraseBuilder;
|
|||
|
use think\App;
|
|||
|
use think\db\exception\DataNotFoundException;
|
|||
|
use think\db\exception\DbException;
|
|||
|
use think\db\exception\ModelNotFoundException;
|
|||
|
use think\facade\Cache;
|
|||
|
|
|||
|
class Login extends BaseController
|
|||
|
{
|
|||
|
protected $repository;
|
|||
|
|
|||
|
public function __construct(App $app, MerchantAdminRepository $repository)
|
|||
|
{
|
|||
|
|
|||
|
parent::__construct($app);
|
|||
|
$this->repository = $repository;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* TODO 判断是否需要滑块验证码
|
|||
|
* @return \think\response\Json
|
|||
|
* @author Qinii
|
|||
|
* @day 2022/10/11
|
|||
|
*/
|
|||
|
public function ajCaptchaStatus()
|
|||
|
{
|
|||
|
$data = $this->request->params(['account']);
|
|||
|
$key = 'mer_login_failuree_'.$data['account'];
|
|||
|
$numb = (Cache::get($key) ?? 0);
|
|||
|
return app('json')->success(['status' => $numb > 2 ]);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @param LoginValidate $validate
|
|||
|
* @return mixed
|
|||
|
* @throws DataNotFoundException
|
|||
|
* @throws DbException
|
|||
|
* @throws ModelNotFoundException
|
|||
|
* @author xaboy
|
|||
|
* @day 2020-04-10
|
|||
|
*/
|
|||
|
public function login(LoginValidate $validate)
|
|||
|
{
|
|||
|
$data = $this->request->params(['account', 'password', 'code', 'key',['captchaType', ''], ['captchaVerification', ''],'token']);
|
|||
|
$validate->check($data);
|
|||
|
|
|||
|
//图形验证码废弃
|
|||
|
// if(Cache::get('mer_login_freeze_'.$data['account']))
|
|||
|
// return app('json')->fail('账号或密码错误次数太多,请稍后在尝试');
|
|||
|
// $this->repository->checkCode($data['key'], $data['code']);
|
|||
|
|
|||
|
$key = 'mer_login_failuree_'.$data['account'];
|
|||
|
$numb = (Cache::get($key) ?? 0);
|
|||
|
if($numb > 2){
|
|||
|
if (!$data['captchaType'] || !$data['captchaVerification'])
|
|||
|
return app('json')->fail('请滑动滑块验证');
|
|||
|
try {
|
|||
|
aj_captcha_check_two($data['captchaType'], $data['captchaVerification']);
|
|||
|
} catch (\Throwable $e) {
|
|||
|
return app('json')->fail($e->getMessage());
|
|||
|
}
|
|||
|
}
|
|||
|
$adminInfo = $this->repository->login($data['account'], $data['password']);
|
|||
|
$tokenInfo = $this->repository->createToken($adminInfo);
|
|||
|
$admin = $adminInfo->toArray();
|
|||
|
unset($admin['pwd']);
|
|||
|
$data = [
|
|||
|
'token' => $tokenInfo['token'],
|
|||
|
'exp' => $tokenInfo['out'],
|
|||
|
'admin' => $admin
|
|||
|
];
|
|||
|
Cache::delete($key);
|
|||
|
return app('json')->success($data);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @return mixed
|
|||
|
* @author xaboy
|
|||
|
* @day 2020-04-10
|
|||
|
*/
|
|||
|
public function logout()
|
|||
|
{
|
|||
|
if ($this->request->isLogin())
|
|||
|
$this->repository->clearToken($this->request->token());
|
|||
|
return app('json')->success('退出登录');
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @return mixed
|
|||
|
* @author xaboy
|
|||
|
* @day 2020-04-09
|
|||
|
*/
|
|||
|
public function getCaptcha()
|
|||
|
{
|
|||
|
$codeBuilder = new CaptchaBuilder(null, new PhraseBuilder(4));
|
|||
|
$key = $this->repository->createLoginKey($codeBuilder->getPhrase());
|
|||
|
$captcha = $codeBuilder->build()->inline();
|
|||
|
return app('json')->success(compact('key', 'captcha'));
|
|||
|
}
|
|||
|
}
|