作者 赵彬吉

update

... ... @@ -15,6 +15,7 @@ use App\Models\User\ProjectMenu as ProjectMenuModel;
use App\Models\User\ProjectRole as ProjectRoleModel;
use App\Models\User\User;
use App\Models\User\User as UserModel;
use App\Utils\EncryptUtils;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
... ... @@ -46,15 +47,19 @@ class ComController extends BaseController
}
/**
* 自动登录
* 根据CODE自动登录
* @author zbj
* @date 2023/7/25
*/
public function autologin()
public function autologin(UserLoginLogic $logic, EncryptUtils $encrypt)
{
$userLogic = new UserLoginLogic();
$url = $userLogic->autologin();
return redirect($url);
$data = $encrypt->authcode($this->param['code'], 'DECODE', 'autologin');
$data = json_decode($data, true);
if(empty($data['project_id'])){
$this->response('无效Code',Code::USER_ERROR);
}
$res = $logic->autologin($data['project_id']);
$this->response('请求成功',Code::SUCCESS, $res);
}
/**
... ...
... ... @@ -19,6 +19,7 @@ use App\Models\Project\DeployOptimize;
use App\Models\Project\Payment;
use App\Models\Project\Project;
use App\Models\Task\Task;
use App\Utils\EncryptUtils;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
... ... @@ -61,7 +62,7 @@ class ProjectLogic extends BaseLogic
'test_domain' => $item['deploy_build']['test_domain'] ?? 0,
'domain' => $item['deploy_optimize']['domain'] ?? 0,
'created_at' => date('Y年m月d日', strtotime($item['created_at'])),
'autologin_url' => env('APP_URL') . '/autologin?project_id=' . $item['id'],
'autologin_url' => $this->getAutoLoginUrl($item['id']),
'product_num' => Product::getNumByProjectId($item['id']),
'keyword_num' => $item['deploy_build']['keyword_num'] ?? 0,
'article_num' => Blog::getNumByProjectId($item['id']) + News::getNumByProjectId($item['id']),
... ... @@ -72,6 +73,13 @@ class ProjectLogic extends BaseLogic
return $list;
}
public function getAutoLoginUrl($project_id){
$encrypt = new EncryptUtils();
$code = $encrypt->authcode(json_encode(['project_id' => $project_id]), 'ENCODE', 'autologin', 3600);
$param = http_build_query(['code' => $code]);
return env('B_URL') . '/autologin?' . $param;
}
public function getInfo($id)
{
parent::setWith(['payment', 'deploy_build', 'deploy_optimize']); //删除缓存要添加带with的cache_key
... ...
... ... @@ -63,33 +63,24 @@ class UserLoginLogic
* @author zbj
* @date 2023/7/25
*/
public function autologin()
public function autologin($project_id)
{
$current_url = url()->current();
$refer_url = url()->previous();
if ($current_url == $refer_url) {
Common::set_user_login(['user_id'=>0, 'ip'=>request()->ip(), 'project_id' => $this->param['project_id'] ?? 0,'remark' => ' - -|' . $refer_url]);
echo ' - -';
exit;
}
if (strpos($refer_url, 'www.quanqiusou.cn') === false && strpos($refer_url, 'crm.globalso.com') === false && strpos($refer_url, 'crm.globalso.com') === false) {
Common::set_user_login(['user_id'=>0, 'ip'=>request()->ip(), 'project_id' => $this->param['project_id'] ?? 0,'remark' => ' 来源错误|' . $refer_url]);
echo '来源错误';
exit;
}
if (!$this->param['project_id']) {
Common::set_user_login(['user_id'=>0, 'ip'=>request()->ip(), 'project_id' => $this->param['project_id'] ?? 0,'remark' => ' 没有传入链接|' . $refer_url]);
echo '没有连接';
exit;
}
$has_user = User::where('project_id', $this->param['project_id'])->orderBy('id', 'asc')->first();
$has_user = User::where('project_id', $project_id)->orderBy('id', 'asc')->select(['id','mobile','role_id','token','name','project_id'])->first();
if (empty($has_user->id)) {
Common::set_user_login(['user_id'=>0, 'ip'=>request()->ip(), 'project_id' => $this->param['project_id'] ?? 0,'remark' => ' 该项目未找到注册账号|' . $refer_url]);
echo '该项目未找到注册账号';
exit;
Common::set_user_login(['user_id'=>0, 'ip'=>request()->ip(), 'project_id' => $this->param['project_id'] ?? 0,'remark' => '该项目未找到注册账号']);
$this->fail('该项目未找到注册账号');
}
$info = $this->verifyRole($has_user->toArray());
return redirect('admin');
if(!Cache::get($info['token'])){
//生成新token
$token = md5(uniqid().$info['id']);
//存储缓存
$info['token'] = $token;
Cache::add($token,$info);
}
Common::set_user_login(['user_id'=>$info['id'],'ip'=>request()->ip(),'project_id'=>$info['project_id'], 'remark' => '自动登录']);
return $info;
}
/**
... ...
... ... @@ -338,4 +338,5 @@ Route::group([], function () {
Route::any('/stringTranslation', [\App\Http\Controllers\Bside\ComController::class, 'stringTranslation'])->name('com_stringTranslation');
Route::any('/sendLoginSms', [\App\Http\Controllers\Bside\ComController::class, 'sendLoginSms'])->name('sendLoginSms');
Route::get('/file/download', [\App\Http\Controllers\Bside\FileController::class, 'download'])->name('file_download');
Route::any('/autologin', [\App\Http\Controllers\Bside\ComController::class, 'autologin'])->name('autologin');
});
... ...