2014-10-15 13 views
5

Sto utilizzando SlimFramework e JWT per gestire l'autenticazione basata su token con login e password.Lettura token con thinframework

Sono riuscito ad accedere e inviare token in risposta.

Ecco il mio codice:

<?php 
require_once("vendor/autoload.php"); 

$app = new \Slim\Slim(); 
$app->add(new \Slim\Middleware\ContentTypes()); 

$app->post('/auth/login', function() use ($app) { 
    $params = $app->request()->getBody(); 
    if ($params['email'] == "login" && $params['password'] == "password") { 
     $key = "example_key"; 
     $token = array(
      "id" => "1", 
      "exp" => time() + (60 * 60 * 24) 
     ); 
     $jwt = JWT::encode($token, $key); 
     $app->response->headers->set('Content-Type', 'application/json'); 
     echo json_encode(array("token" => $jwt)); 
    } 
}); 

$app->get("/user", function() { 
    echo "ok"; 
}); 
$app->run(); 
  1. Come controllare token nel /user percorso? Richiesta /user richiesta Sto inviando l'intestazione con Authorization:Bearer eHrR....
  2. E solo per la cancellazione - è quel tipo di autenticazione (login e password) e OAuth lo stesso?

risposta

3

È possibile utilizzare JSON Web Token Authentication middleware. Installa l'ultima versione usando il compositore.

$ composer require tuupola/slim-jwt-auth 

aggiungere anche quanto segue alla .htaccess file. In caso contrario, PHP non avrà accesso all'intestazione Authorization: Bearer.

RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

Quindi aggiungere il middleware all'applicazione Slim. Quando viene effettuata una richiesta, il middleware tenta di convalidare e decodificare il token. Se il token non viene trovato, il server risponderà con 401 Unauthorized. Se il token esiste ma si verifica un errore durante la convalida e la decodifica, il server risponderà con 400 Bad Request.

Nella funzione di callback il middleware memorizza il contenuto del token su $app->jwt. Puoi accedervi più tardi in altri percorsi.

$app = new \Slim\Slim(); 

$app->add(new \Slim\Middleware\JwtAuthentication([ 
    "secret" => "your_example_key", 
    "callback" => function ($options) use ($app) { 
     $app->jwt = $options["decoded"]; 
    } 
])); 

$app->get("/user", function() { 
    print_r($app->jwt); 
}); 

$app->run();