123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- <?php
- namespace App\Traits;
- use App\Jobs\SendEmail;
- use App\Services\LoginService;
- use Txj\Elastic\Facades\ES;
- use Gregwar\Captcha\CaptchaBuilder;
- use Gregwar\Captcha\PhraseBuilder;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Hash;
- trait LoginTrait
- {
- /**
- * 是否开启登录日志记录
- *
- * @var bool
- */
- private $is_open_login_log = false;
- /**
- * 退出登录
- *
- * @return mixed
- */
- public function loginOut()
- {
- $tokenValue = $this->getToken();
- $loginServer = new LoginService($this->siteAliasName);
- if (empty($tokenValue)) {
- return responseMessage(2001, '操作失败!');
- } else {
- $loginServer->clearLoginInfo($tokenValue);
- return responseMessage(1001, '操作成功!');
- }
- }
- /**
- * 获取加密的rsa公钥
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function getKey()
- {
- $loginService = new LoginService($this->siteAliasName);
- $publicRSAKey = preg_replace('/-----BEGIN PUBLIC KEY-----|-----END PUBLIC KEY-----|\r|\n/is', '', $loginService->getPublicKey());
- return responseMessage(1002, '', $publicRSAKey);
- }
- /**
- * 获取图形验证码信息
- *
- * @return mixed
- */
- public function yzm()
- {
- $phraseBuilder = new PhraseBuilder(4, '0123456789');
- $builder = new CaptchaBuilder(null, $phraseBuilder);
- $builder->build();
- $yzm = $builder->getPhrase();
- $yzmImg = $builder->inline();
- $loginService = new LoginService($this->siteAliasName);
- $loginService->saveImgYzm($yzm);
- return responseMessage(1002, 'success', $yzmImg);
- }
- /**
- * 检验图形验证码
- *
- * @param $yzm
- * @return bool
- */
- protected function checkImgYzm($yzm)
- {
- $loginService = new LoginService($this->siteAliasName);
- return $loginService->checkImgYzm($yzm);
- }
- /**
- * 清除图形验证码
- */
- protected function clearYzm()
- {
- $loginService = new LoginService($this->siteAliasName);
- $loginService->clearImgYzm();
- }
- /**
- * 设置登录状态
- *
- * @param $userInfo
- * @return array
- */
- protected function setLoginStatus($userInfo)
- {
- $loginService = new LoginService($this->siteAliasName);
- return $loginService->setLoginCookie($userInfo);
- }
- /**
- * 发送短信验证码
- */
- public function sendSms()
- {
- $requestData = Request::all();
- $mobile = $requestData['mobile'] ?? '';
- $type = $requestData['type'] ?? '';
- if (empty($type) || !in_array($type, ['weregister', 'register', 'forget', 'untie_mobile'])) {
- $msg = ['code' => 2001, 'msg' => '参数错误!'];
- } elseif (empty($mobile)) {
- $msg = ['code' => 2002, 'msg' => '请输入手机号!'];
- } elseif (!isMobile($mobile)) {
- $msg = ['code' => 2003, 'msg' => '请输入正确的手机号!'];
- } else {
- $msg = $this->smsService->sendSms($mobile, $type);
- }
- return response()->json($msg);
- }
- /**
- * 通过手机号和密码登录
- *
- * @param $where
- * @param $input_password
- * @param $table_user
- * @return \Illuminate\Http\JsonResponse
- */
- protected function toLoginIn($where, $input_password, $table_user)
- {
- $loginService = new LoginService($this->siteAliasName);
- $result = ES::table($table_user)->where($where)->queryOne();
- if ($result) {
- if (empty($result['password'])) {
- return responseMessage(2006,'没有设置密码,请点击“忘记密码”,重新设置!');
- } else {
- //验证密码的长度,必须是8-20位
- $length = mb_strlen($input_password);
- if ($length < 8 || $length > 20) {
- return responseMessage(2006,'密码长度必须介于 8 - 20 个字符之间!');
- }
- if (Hash::check($input_password, $result['password'])) {
- $encryptArr = $loginService->setLoginCookie($result); //设置登录状态
- unset($result['id']);
- unset($result['password']);
- $encryptArr['info'] = $result;
- return responseMessage(1001,'登录成功',$encryptArr);
- } else {
- return responseMessage(2007,'帐号 或 密码 不正确');
- }
- // 登录日志
- // if ($this->is_open_login_log) {
- // todo 不同的sitealias 不能的日志表
- // $this->dispatch(new UserLog($table_user, [
- // 'user_id' => $result['id'],
- // 'ip' => getRealIp(),
- // 'user_agent' => \Illuminate\Support\Facades\Request::userAgent(),
- // 'type' => 1, // 1 登录日志 2 操作日志
- // 'content' => $msg['msg'],
- // ]));
- // }
- }
- } else {
- return responseMessage(2008,'帐号不存在,请先注册!');
- }
- }
- }
|