2017-09-29 6 views
0

Ich verwende eine Middleware, um zur Anmeldeseite umzuleiten, wenn die Sitzung nicht eingestellt ist.Authentifizierung Middleware Slim 3.0

$app->get('/dashboard', function (Request $request, Response $response, $args) { 
include_once('employee-portal/dashboard.php'); 
return $response;})->add(new AuthMiddleware('counter', true, $app->getContainer())); 

und meine Middleware:

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; 
} } 

aber dies nicht funktioniert. Ich kann sogar die Dashboard-Seite ohne Login sehen. und selbst nach der Anmeldung kann ich nicht auf die $_SESSION['user_type'] Sitzungsvariable zugreifen.

jede Hilfe würde geschätzt werden. Danke im Voraus. immer return true in der ersten if() Anweisung von userIsAuthorised() Methode

+0

Ich sehe 'session_start()' nirgendwo. – rndus2r

+0

wird im Namensraum aufgerufen. SessionManager :: isLoggedIn(); –

+0

Wird dies in Ihrer Middleware-Klasse aufgerufen? – rndus2r

Antwort

0

Sie passieren 'counter' in Ihrem AuthMiddleware Konstruktor, es verursacht.

if ($this->min_role == 'counter') 

wird immer wahr sein, weil Sie $this->min = 'counter' in Ihrem Konstruktor festgelegt. Versuchen Sie, den new AuthMiddleware() und den Konstruktor so umzuschreiben, dass Sie den Container einfach übergeben. Bevor Sie die new AuthMiddleware() aufrufen, können Sie Folgendes tun: $container['min_role'] = 'counter', wenn Sie es an anderer Stelle in Ihrer App benötigen.

Verwandte Themen