197 lines
5.8 KiB
PHP
197 lines
5.8 KiB
PHP
<?php
|
||
// +----------------------------------------------------------------------
|
||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||
// +----------------------------------------------------------------------
|
||
// | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
|
||
// +----------------------------------------------------------------------
|
||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||
// +----------------------------------------------------------------------
|
||
// | Author: CRMEB Team <admin@crmeb.com>
|
||
// +----------------------------------------------------------------------
|
||
|
||
namespace app\controller\supplier;
|
||
|
||
use app\Request;
|
||
|
||
use crmeb\utils\Captcha;
|
||
use crmeb\services\SupplierCacheService;
|
||
use app\services\supplier\LoginServices;
|
||
use think\exception\ValidateException;
|
||
use app\validate\api\user\RegisterValidates;
|
||
use think\facade\Cache;
|
||
use think\facade\Config;
|
||
|
||
/**
|
||
* 登录
|
||
* Class AuthController
|
||
* @package app\api\controller
|
||
*/
|
||
class Login
|
||
{
|
||
|
||
/**
|
||
* @var LoginServices|null
|
||
*/
|
||
protected $services = NUll;
|
||
|
||
/**
|
||
* LoginController constructor.
|
||
* @param LoginServices $services
|
||
*/
|
||
public function __construct(LoginServices $services)
|
||
{
|
||
$this->services = $services;
|
||
}
|
||
|
||
/**
|
||
* @param Request $request
|
||
* @return mixed
|
||
* @author 等风来
|
||
* @email 136327134@qq.com
|
||
* @date 2022/10/11
|
||
*/
|
||
public function getAjCaptcha(Request $request)
|
||
{
|
||
[$account,] = $request->postMore([
|
||
'account',
|
||
], true);
|
||
|
||
$key = 'supplier_login_captcha_' . $account;
|
||
|
||
return app('json')->success('',['is_captcha' => Cache::get($key) > 2]);
|
||
}
|
||
|
||
/**
|
||
* @return mixed
|
||
*/
|
||
public function ajcaptcha(Request $request)
|
||
{
|
||
$captchaType = $request->get('captchaType');
|
||
return app('json')->success('',aj_captcha_create($captchaType));
|
||
}
|
||
|
||
/**
|
||
* 一次验证
|
||
* @return mixed
|
||
*/
|
||
public function ajcheck(Request $request)
|
||
{
|
||
[$token, $pointJson, $captchaType] = $request->postMore([
|
||
['token', ''],
|
||
['pointJson', ''],
|
||
['captchaType', ''],
|
||
], true);
|
||
|
||
try {
|
||
aj_captcha_check_one($captchaType, $token, $pointJson);
|
||
return app('json')->success();
|
||
} catch (\Throwable $e) {
|
||
return app('json')->fail(400336);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取后台登录页轮播图以及LOGO
|
||
* @return mixed
|
||
*/
|
||
public function info()
|
||
{
|
||
return app('json')->success('',$this->services->getLoginInfo());
|
||
}
|
||
|
||
/**
|
||
* 验证码
|
||
* @return \app\controller\admin\Login|\think\Response
|
||
*/
|
||
public function captcha()
|
||
{
|
||
return app()->make(Captcha::class)->create();
|
||
}
|
||
|
||
/**
|
||
* H5账号登陆
|
||
* @param Request $request
|
||
* @return mixed
|
||
* @throws \think\db\exception\DataNotFoundException
|
||
* @throws \think\db\exception\ModelNotFoundException
|
||
* @throws \think\exception\DbException
|
||
*/
|
||
public function login(Request $request)
|
||
{
|
||
[$token,$account, $password, $captchaType, $captchaVerification] = $request->postMore([
|
||
['token', ''],
|
||
'account',
|
||
'pwd',
|
||
['captchaType', ''],
|
||
['captchaVerification', '']
|
||
], true);
|
||
|
||
validate(\app\validate\supplier\SystemSupplierValidate::class)->scene('login')->check(['account' => $account, 'pwd' => $password]);
|
||
|
||
$key = 'supplier_login_captcha_' . $account;
|
||
|
||
if (Cache::has($key) && Cache::get($key) > 2) {
|
||
if (!$captchaType || !$captchaVerification) {
|
||
return app('json')->fail('请拖动滑块验证');
|
||
}
|
||
//二次验证
|
||
try {
|
||
aj_captcha_check_two($captchaType, $captchaVerification, $token);
|
||
} catch (\Throwable $e) {
|
||
return app('json')->fail($e->getMessage());
|
||
}
|
||
}
|
||
|
||
$res = $this->services->login($account, $password, 'supplier');
|
||
if ($res) Cache::delete($key);
|
||
|
||
return app('json')->success('',$res);
|
||
}
|
||
|
||
/**
|
||
* 退出登录
|
||
* @param Request $request
|
||
* @return mixed
|
||
* @throws \Psr\SimpleCache\InvalidArgumentException
|
||
*/
|
||
public function logout(Request $request)
|
||
{
|
||
$key = trim(ltrim($request->header(Config::get('cookie.token_name')), 'Bearer'));
|
||
SupplierCacheService::redisHandler()->delete(md5($key));
|
||
return app('json')->success();
|
||
}
|
||
|
||
/**
|
||
* 密码修改
|
||
* @param Request $request
|
||
* @return mixed
|
||
*/
|
||
public function reset(Request $request)
|
||
{
|
||
[$account, $captcha, $password] = $request->postMore([['account', ''], ['captcha', ''], ['password', '']], true);
|
||
try {
|
||
validate(RegisterValidates::class)->scene('register')->check(['account' => $account, 'captcha' => $captcha, 'password' => $password]);
|
||
} catch (ValidateException $e) {
|
||
return app('json')->fail($e->getError());
|
||
}
|
||
$verifyCode = SupplierCacheService::get('code_' . $account);
|
||
if (!$verifyCode)
|
||
return app('json')->fail('请先获取验证码');
|
||
$verifyCode = substr($verifyCode, 0, 6);
|
||
if ($verifyCode != $captcha) {
|
||
return app('json')->fail('验证码错误');
|
||
}
|
||
if (strlen(trim($password)) < 4 || strlen(trim($password)) > 64)
|
||
return app('json')->fail('密码必须是在4到64位之间');
|
||
if ($password == '123456') return app('json')->fail('密码太过简单,请输入较为复杂的密码');
|
||
$resetStatus = $this->services->reset($account, $password);
|
||
if ($resetStatus) {
|
||
SupplierCacheService::delete('code_' . $account);
|
||
return app('json')->success('修改成功');
|
||
}
|
||
return app('json')->fail('修改失败');
|
||
}
|
||
|
||
|
||
}
|