|
@@ -16,6 +16,7 @@ use Hyperf\Validation\Contract\ValidatorFactoryInterface;
|
|
|
use \Phper666\JWTAuth\JWT;
|
|
|
use App\Model\UserToken;
|
|
|
use Hyperf\HttpServer\Response;
|
|
|
+use Hyperf\HttpMessage\Cookie\Cookie;
|
|
|
/**
|
|
|
* @AutoController()
|
|
|
*/
|
|
@@ -62,7 +63,7 @@ class LoginController extends AbstractController
|
|
|
$errorMessage = $validator->errors()->first();
|
|
|
return Result::error($errorMessage);
|
|
|
}
|
|
|
- // $comm = new CommonService();
|
|
|
+ // $comm = new CommonService();
|
|
|
// $redis = $this->container->get(\Hyperf\Redis\Redis::class);
|
|
|
// $code = $redis->get($reqData['code']);
|
|
|
// if (empty($code)) {
|
|
@@ -98,11 +99,11 @@ class LoginController extends AbstractController
|
|
|
'SiteId'=>Context::get("SiteId")
|
|
|
];
|
|
|
var_dump("参数:",$authData);
|
|
|
- $resultAuth = $this->checkUserAuth($authData);
|
|
|
+ $resultAuth = $this->checkUserAuth($authData);
|
|
|
|
|
|
- if(!$resultAuth){
|
|
|
- return Result::error("您没有权限登陆此网站");
|
|
|
- }
|
|
|
+ if(!$resultAuth){
|
|
|
+ return Result::error("您没有权限登陆此网站");
|
|
|
+ }
|
|
|
}
|
|
|
$userData = [
|
|
|
'uid' => $userInfos['data']['id'], // 如果使用单点登录,必须存在配置文件中的sso_key的值,一般设置为用户的id
|
|
@@ -117,21 +118,21 @@ class LoginController extends AbstractController
|
|
|
// 检查是否有旧的token
|
|
|
$old_token = UserToken::where('user_id', $userData['uid'])->first();
|
|
|
if (!empty($old_token)) {
|
|
|
- $jwt->logout($old_token->token);
|
|
|
- try {
|
|
|
- $jwt->verifyToken($old_token->token);
|
|
|
- }catch (\Exception $exception){
|
|
|
- $code = $exception->getCode();
|
|
|
- if ($code== 400) {
|
|
|
- $new_token = UserToken::where('user_id', $userData['uid'])->update(['token' => $token->toString()]);
|
|
|
- if (empty($new_token)) {
|
|
|
- return Result::error("Token过期失败!");
|
|
|
- }
|
|
|
-
|
|
|
- } else{
|
|
|
+ $jwt->logout($old_token->token);
|
|
|
+ try {
|
|
|
+ $jwt->verifyToken($old_token->token);
|
|
|
+ }catch (\Exception $exception){
|
|
|
+ $code = $exception->getCode();
|
|
|
+ if ($code== 400) {
|
|
|
+ $new_token = UserToken::where('user_id', $userData['uid'])->update(['token' => $token->toString()]);
|
|
|
+ if (empty($new_token)) {
|
|
|
return Result::error("Token过期失败!");
|
|
|
}
|
|
|
+
|
|
|
+ } else{
|
|
|
+ return Result::error("Token过期失败!");
|
|
|
}
|
|
|
+ }
|
|
|
}else{
|
|
|
$usernew_token = $token->toString();
|
|
|
$user_token = UserToken::create([
|
|
@@ -373,8 +374,8 @@ class LoginController extends AbstractController
|
|
|
return Result::error($errorMessage);
|
|
|
}
|
|
|
try {
|
|
|
- $status = $jwt->verifyToken($reqData['token']);
|
|
|
- var_dump("状态:",$status);
|
|
|
+ $status = $jwt->verifyToken($reqData['token']);
|
|
|
+ // var_dump("状态:",$status);
|
|
|
return Result::success(['isLogin' => true]);
|
|
|
}catch(\Exception $e){
|
|
|
return Result::error('token已过期:'.$e->getMessage());
|
|
@@ -450,8 +451,12 @@ class LoginController extends AbstractController
|
|
|
{
|
|
|
// 获取请求数据并设置默认值
|
|
|
$reqData = $this->request->all();
|
|
|
+
|
|
|
+ // 安全过滤 Admin-Token 和 ticket
|
|
|
+ $cookieList = $this->request->getCookieParams();
|
|
|
// 安全过滤 Admin-Token 和 ticket
|
|
|
- $adminToken = !empty($_COOKIE['Admin-Token']) ? $this->sanitizeInput($_COOKIE['Admin-Token']) : '';
|
|
|
+ $adminToken = !empty($cookieList['Admin-Token']) ? $this->sanitizeInput($cookieList['Admin-Token']) : '';
|
|
|
+
|
|
|
$ticket = !empty($reqData['ticket']) ? $this->sanitizeInput($reqData['ticket']) : '';
|
|
|
$backurl = $this->sanitizeBackUrl($reqData['backurl'] ?? $_SERVER['HTTP_REFERER'] ?? '');
|
|
|
|
|
@@ -460,36 +465,33 @@ class LoginController extends AbstractController
|
|
|
if (empty($theHost)) {
|
|
|
return Result::error('系统配置错误:THE_HOST 未定义');
|
|
|
}
|
|
|
-
|
|
|
+ var_dump("admintoken:",$adminToken);
|
|
|
// 如果存在 adminToken,则进行登录校验
|
|
|
if (!empty($adminToken)) {
|
|
|
- try {
|
|
|
- $redis = $this->container->get(\Hyperf\Redis\Redis::class);
|
|
|
-
|
|
|
- // 如果 ticket 存在且有效,则直接跳转
|
|
|
+ // 处理登录
|
|
|
+ $redis = $this->container->get(\Hyperf\Redis\Redis::class);
|
|
|
+ var_dump("ticket1111:",$ticket);
|
|
|
+ if(!empty($ticket)){
|
|
|
if (!empty($ticket) && $redis->exists('ticket:' . $ticket)) {
|
|
|
- $this->redirectWithTicket($backurl, $ticket, $adminToken);
|
|
|
- // return;
|
|
|
- }
|
|
|
|
|
|
- // 如果 ticket 不存在或无效,则重新生成 ticket 并跳转
|
|
|
- if (empty($ticket)) {
|
|
|
- $ticket = md5($adminToken);
|
|
|
+ $backurl = rtrim($backurl, '/');
|
|
|
+ return $this->response->redirect($this->fun_http($backurl . '?ticket=' . $ticket . '&admintoken=' . urlencode($adminToken)), 302);
|
|
|
+
|
|
|
+ }else{
|
|
|
+ var_dump("222222222:");
|
|
|
+ return $this->response->redirect($this->fun_http('http://'.$theHost.'/#/login?backurl='.urlencode($backurl)), 302);
|
|
|
}
|
|
|
|
|
|
- // 跳转到目标页面
|
|
|
- $this->redirectWithTicket($backurl, $ticket, $adminToken);
|
|
|
- // return;
|
|
|
- } catch (\Throwable $e) {
|
|
|
- // 记录异常日志
|
|
|
-// \Hyperf\Logger\LoggerFactory::get('default')->error('Redis 操作失败: ' . $e->getMessage());
|
|
|
- // 捕获 Redis 异常,返回错误信息
|
|
|
- return Result::error('系统错误:Redis 操作失败');
|
|
|
+ }else{
|
|
|
+ $ticket = md5($adminToken);
|
|
|
}
|
|
|
+ var_dump("333333333333333:");
|
|
|
+ return $this->response->redirect($this->fun_http($backurl . '?ticket=' . $ticket . '&admintoken=' . urlencode($adminToken)), 302);
|
|
|
+
|
|
|
+ }else{
|
|
|
+ var_dump("444444444444444:");
|
|
|
+ return $this->response->redirect($this->fun_http('http://'.$theHost.'/#/login?backurl='.urlencode($backurl)), 302);
|
|
|
}
|
|
|
- // 如果没有 adminToken,则跳转到登录页面
|
|
|
- $loginUrl = 'http://' . $theHost . '/#/login?backurl=' . urlencode($backurl);
|
|
|
- return $this->response->redirect($loginUrl, 302);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -524,6 +526,9 @@ class LoginController extends AbstractController
|
|
|
{
|
|
|
$backurl = rtrim($backurl, '/');
|
|
|
$redirectUrl = $this->fun_http($backurl . '?ticket=' . $ticket . '&admintoken=' . urlencode($adminToken));
|
|
|
+
|
|
|
+// $loginUrl = 'http://' . $theHost . '/#/login?backurl=' . urlencode($backurl);
|
|
|
+// return $this->response->redirect($loginUrl, 302);
|
|
|
return $this->response->redirect($redirectUrl, 302);
|
|
|
}
|
|
|
|
|
@@ -547,6 +552,7 @@ class LoginController extends AbstractController
|
|
|
*/
|
|
|
public function logout(Jwt $jwt)
|
|
|
{
|
|
|
+
|
|
|
$reqData = $this->request->all();
|
|
|
$validator = $this->validationFactory->make(
|
|
|
$reqData,
|
|
@@ -565,22 +571,26 @@ class LoginController extends AbstractController
|
|
|
}
|
|
|
$redis = $this->container->get(\Hyperf\Redis\Redis::class);
|
|
|
$ticket = md5($reqData['admintoken']);
|
|
|
- $isDel = 0;
|
|
|
- if ($redis->exists('ticket:' . $ticket)) {
|
|
|
- $res = $redis->del('ticket:' . $ticket);
|
|
|
- if (!!$res && $res == 1) $isDel = 1;
|
|
|
- }else{
|
|
|
- $isDel = 1;
|
|
|
- }
|
|
|
- setcookie("Admin-Token", "", time(), "/");
|
|
|
+
|
|
|
+ $res = $redis->del('ticket:' . $ticket);
|
|
|
+ var_dump("删除redis:", $res);
|
|
|
+ var_dump("获取redis:", $redis->get('ticket:' . $ticket));
|
|
|
+ $expire = time();
|
|
|
+ $cookieName = 'Admin-Token';
|
|
|
+ // 创建 Cookie 实例
|
|
|
+ $cookie = new Cookie($cookieName, '', $expire, '/');
|
|
|
+ // 清空 Cookie
|
|
|
+ $r = $this->response = $this->response->withCookie($cookie);
|
|
|
+ var_dump("清空Cookie:", $r);
|
|
|
try {
|
|
|
$jwt->logout($reqData['admintoken']);
|
|
|
-
|
|
|
}catch (\Exception $e){
|
|
|
- $backurl = $this->fun_http($reqData['backurl']);
|
|
|
- return $this->response->redirect($backurl, 302);
|
|
|
+ var_dump("返回错误信息:",$e->getMessage());
|
|
|
+// $backurl = $this->fun_http($reqData['backurl']);
|
|
|
+// return $this->response->redirect($backurl, 302);
|
|
|
}
|
|
|
$backurl = $this->fun_http($reqData['backurl']);
|
|
|
+ var_dump("返回地址:",$backurl);
|
|
|
return $this->response->redirect($backurl, 302);
|
|
|
}
|
|
|
|
|
@@ -590,7 +600,9 @@ class LoginController extends AbstractController
|
|
|
*/
|
|
|
public function backlogin()
|
|
|
{
|
|
|
+
|
|
|
$reqData = $this->request->all();
|
|
|
+ var_dump("===============接收参数:",$reqData);
|
|
|
$validator = $this->validationFactory->make(
|
|
|
$reqData,
|
|
|
[
|
|
@@ -609,9 +621,18 @@ class LoginController extends AbstractController
|
|
|
$redis = $this->container->get(\Hyperf\Redis\Redis::class);
|
|
|
$ticket = md5($reqData['token']);
|
|
|
$res = $redis->set('ticket:' . $ticket, $reqData['token'], 3600*24);
|
|
|
+ var_dump("===============返回值:",$res);
|
|
|
+ $expire = time()+3600*24;
|
|
|
+ $cookieName = 'Admin-Token';
|
|
|
+ // 创建 Cookie 实例
|
|
|
+ $cookie = new Cookie($cookieName, $reqData['token'], $expire, '/');
|
|
|
+ // 清空 Cookie
|
|
|
+ $r = $this->response = $this->response->withCookie($cookie);
|
|
|
+ var_dump("设置token:", $r);
|
|
|
if($res && !empty($ticket)){
|
|
|
$url = $reqData['backurl'] . '/?ticket=' . $ticket . '&admintoken=' . urlencode($reqData['token']);
|
|
|
$url = $this->fun_http($url);
|
|
|
+ var_dump("跳转地址gogo:",$url);
|
|
|
return $this->response->redirect($url, 302);
|
|
|
}
|
|
|
}
|