【发布时间】:2017-02-22 21:03:52
【问题描述】:
目标是将用户从中间件重定向到登录页面。 中间件是从一个纤细的路由组中调用的:
$this->get( '/profile', ProfileController::class . ':index' )->add( new RequireLogin() );
这是中间件
<?php
namespace Rib\Src\MiddleWares;
use Rib\Src\Services\FlashMessages;
use Slim\Http\Request;
use Slim\Http\Response;
class RequireLogin
{
/**
* Example middleware invokable class
*
* @param \Psr\Http\Message\ServerRequestInterface $request PSR7 request
* @param \Psr\Http\Message\ResponseInterface $response PSR7 response
* @param callable $next Next middleware
*
* @return \Psr\Http\Message\ResponseInterface
*/
public function __invoke( $request, $response, $next )
{
if ( ! isset( $_SESSION[ 'id' ] ) ) {
FlashMessages::flashIt( 'message', "The page you tried to access requires an active session. Please log back in." );
header( 'Location: /user/login' ); # THIS LINE
exit; # AND THIS ONE
}
$response = $next( $request, $response );
return $response;
}
}
我的目标是当中间件检测到用户当前未登录时,将用户重定向到登录页面。 你可以看到我目前的方式很糟糕:我使用重定向然后退出。
如何用正确的“苗条”方式替换这两行?
【问题讨论】: