【发布时间】:2017-10-11 00:39:47
【问题描述】:
如果没有设置会话,我正在使用中间件重定向到登录页面。
$app->get('/dashboard', function (Request $request, Response $response, $args) {
include_once('employee-portal/dashboard.php');
return $response;})->add(new AuthMiddleware('counter', true, $app->getContainer()));
和我的中间件:
class AuthMiddleware implements MiddlewareInterface{
private $min_role = 'counter';
private $redirect = true;
private $container = null;
public function __construct($role_required, $login_redirect, $container)
{
$this->min_role = $role_required;
$this->redirect = $login_redirect;
$this->container = $container;
}
public function __invoke($request, $response, $next)
{
if ($this->userIsAuthorised()) {
return $next($request, $response);
} else {
if ($this->redirect) {
/**
* @var \Slim\Router router`
*/
return $response->withRedirect(Details::getBaseUrl() . '/login' . '?ref=' . $request->getUri());
}
return $response->withStatus(401)->write("Sorry boss you are not authorised to see my secret");
}
}
private function userIsAuthorised()
{
if ($this->min_role == 'counter') {
return true;
} else if (SessionManager::isLoggedIn()) {
if ($_SESSION['user_type']=='counter') {
return true;
}
}
return false;
} }
但这不起作用。
我什至可以在没有登录的情况下看到仪表板页面。即使登录后我也无法访问$_SESSION['user_type'] 会话变量。
任何帮助都会得到帮助。提前致谢。
【问题讨论】:
-
我在任何地方都没有看到
session_start()。 -
它在命名空间中被调用。会话管理器::isLoggedIn();
-
这是在你的中间件类中调用的吗?
-
是的。我刚刚编辑了我的代码。请看看。