Slim 4 身份验证中间件重定向失败

问题描述 投票:0回答:1

我正在尝试使用中间件将未经身份验证的用户重定向到 Google API 身份验证。 如果我直接进入身份验证系统(通过进入 /auth 路线),Google 位将起作用并且用户将被发送到我的主页。但是,如果我进入中间件保护页面,我会得到一个空白页面。
这是我的中间件:

<?php                                                                                                                                                                                                                                                     
declare(strict_types=1);                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
namespace App\Middleware;                                                                                                                                                                                                                                                                                                                                                                                                                             
 
use Slim\Psr7\Response;                                                                                                                                                                                                                                     
use Psr\Http\Message\ServerRequestInterface as Request;                                                                                                                                                                                                     
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;                                                                                                                                                                                              
                                                                                                                                                                                                                                                            
class Auth                                                                                                                                                                                                                                                 
{                                                                                                                                                                                                                                                          
   public function __invoke(Request $request, RequestHandler $handler): Response                                                                                                                                                                          
   {                                                                                                                                                                                                                                                      
      if (!isset($_SESSION['access_token'])) {                                                                                                                                                                                                           
        $response = new Response();                                                                                                                                                                                                                    
        $response->withHeader('Location', '/auth')->withStatus(302);                                                                                                                                                                                   
      } else {                                                                                                                                                                                                                                           
        $response = $handler->handle($request);                                                                                                                                                                                                        
      }                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                            
      return $response;                                                                                                                                                                                                                                  
     }                                                                                                                                                                                                                                                      
} 

既然 Google 位可以工作,问题一定出在我的中间件上,对吗?这也意味着中间件的其他部分正在工作。 有什么建议吗?
TIA

php slim
1个回答
0
投票

原来我写这段代码的时候只是咖啡还没喝够。 我未能将变异响应设置为变量。
在我的 if 语句中应该是:

        $response = new Response();                                                                                                                                                                                                                    
        $response = $response->withHeader('Location', '/auth')->withStatus(302);

第二行的“$response =”是我错过的部分。
希望这对其他人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.