2015-03-30 20 views
5

Sto sviluppando un'applicazione web che utilizza Laravel 5 e angularJs con APIS RESTFUL.Laravel si disconnette automaticamente dopo pochi secondi?

Utilizzo di middleware a scopo di autenticazione. Il mio problema è dopo aver inviato poche richieste contemporaneamente, il sistema si è disconnesso automaticamente inviando l'eccezione 401 dal lato laravel.

controller di base API:

class ApiController extends BaseController { 

    use DispatchesCommands, ValidatesRequests; 

    function __construct() { 
     $this->middleware('api.auth'); 
    } 

} 

Middleware:

class APIMiddleware { 

    /** 
    * Handle an incoming request. 
    * 
    * @param Request $request 
    * @param Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) { 
     if (!Auth::check()) { 
      abort(401, "Unauthorized"); 
     } 
     return $next($request); 
    } 

} 

Login regolatore

public function login(LoginRequest $request) { 
    if (Auth::check()) { 
     Auth::logout(); 
    } 

    if (Auth::attempt(['email' => $request->input('email'), 'password' => $request->input('password')], $request->input('is_remember'))) { 
     return array(true); 
    } else { 
     abort(401, "Invalid email & password"); 
    } 
} 

Dopo pochi richiesta andato, server log out e manda 401 eccezione. Sono bloccato con questo problema.

+0

per me questo errore è stato a causa del cambiamento ** always_populate_raw_post_data = -1 ** a ** always_populate_raw_post_data = 1 ** nel file php.ini .... finalmente ho cambiato in ** always_populate_raw_post_data = 0 ** e tutto ha funzionato bene – ako

risposta

11

Ora sono sicuro al 100% (ea seconda del vostro set-up non posso nemmeno dire che sono sicuro che il 90%), ma dopo aver cambiato il mio session_driverfile-database mi sembra di aver risolto questo problema - questo è se è lo stesso problema.

Credo che fare samething come voi con la mia app - che si trova su una start up di una pagina, sto facendo 6 richiesta (questo è sviluppo e mi cambierà a una così si prega di don piangere). Se carico questa pagina, funziona con circa 3 o 4 richieste, poi l'altra 2-3 torna con una risposta unauthorised. Accade anche solo su richiesta che richiede middleware => auth.

Quindi, ecco la mia teoria sul motivo per cui questo sta accadendo: Poiché, per impostazione predefinita, sessioni vengono salvati in un file di - fare di più richieste in una sola volta significa che file di viene aperto 6 volte in una sola volta - probabilmente rovinandolo (dipende dalla tua macchina). Pertanto, la modifica della sessione in un database, progettato per avere migliaia di richieste contemporaneamente, funziona!

SOLUZIONE:

  1. Vai al file .env e cambiare SESSION_DRIVER=file-SESSION_DRIVER=database.
  2. Successivamente sarà necessario creare una sessione di migrazione: php artisan session:table.
  3. Ora composer dump-autoload per buone pratiche.
  4. Infine migrare (php artisan migrate).

NOTA: io non sono sicuro al 100% ma se questo è il caso, ma per me questa soluzione ha funzionato. Sono anche consapevole del fatto che questa domanda è davvero vecchia, ma sia gli sviluppatori con cui lavoro che io abbiamo avuto questo problema e non sembra esserci una soluzione, quindi, per quanto mi piacerebbe pubblicarlo.

+0

Grazie per il commento .. Quando sono cambiato sessione da file a database. ora funziona bene .. – gsk

+0

Ha funzionato anche per me. Grazie mille –

1

Potrebbe essere un problema accedere illegalmente alla variabile utente. Si prega di utilizzare Auth::check() prima di accedere a Auth::user() Questo sembra funzionare per il mio progetto. Opzionalmente puoi provare a cambiare il driver di sessione dal file .env.

+0

Penso che tu abbia ragione. Non so esattamente quali siano le cause, ma ho apportato delle modifiche ai miei codici quando ho usato l'istanza di 'utente', ha risolto. Forse stavo cercando di accedere a 'user' quando era' null' o sth così. – ako

0

Potrebbe essere utile per qualcuno: aveva lo stesso problema. Ho cambiato il nome del cookie nelle impostazioni della sessione. Per impostazione predefinita è laravel_session, quindi prova a impostarlo su qualcos'altro

0

Gestito per capirlo ... Poiché utilizzo laravel per quasi tutti i miei progetti, ho dimenticato di cambiare il nome della sessione, di conseguenza, uno la sessione stava sovrascrivendo l'altra, causando la disconnessione automatica. Quindi, se hai più progetti laravel in esecuzione, assicurati che abbiano tutti nomi di sessione diversi. Spero che questo aiuti qualcuno in futuro! Here is a Laracast thread on this issue.

Per me questo è stato il processo per risolvere il problema:

  1. sgomberati i cookie dal browser per localhost.
  2. Valore modificato della chiave cookie in app/session.php.
  3. Ran php artisan config:clear.
Problemi correlati