zx/app/controller/merchant/system/admin/Login.php

122 lines
4.0 KiB
PHP
Raw Permalink Normal View History

2024-07-02 15:32:59 +08:00
<?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'));
}
}