2014-04-23 16 views
25

Utilizzo i framework laravel 4. Quando ho usato il reindirizzamento dopo Auth :: logout(), il reindirizzamento non funzionava. Ho usato anche View :: make(), ma lo stesso "Whoop, sembra che qualcosa sia andato storto." l'errore si alza.Il reindirizzamento di Laravel con il logout non funziona

public function getLogout() { 
     Auth::logout(); 
    return Redirect::to('users/login')->with('message', 'Your are now logged out!'); 
} 

Questo è il codice di uscita. Sto usando. Qualcuno per favore aiutami con questo.

routes.php

Route::get('/', function() 
    { 
return View::make('hello'); 
    }); 

Route::controller('users', 'UsersController'); 

HTML

  @if(!Auth::check()) 
       <li>{{ HTML::link('users/register', 'Register') }}</li> 
       <li>{{ HTML::link('users/login', 'Login') }}</li> 
      @else 
       <li>{{ HTML::link('users/logout', 'logout') }}</li> 
      @endif 

Questo è ciò che i miei spettacoli debugger.

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'remember_token' in 'field list' (SQL: update `users` set `updated_at` = 2014-04-23 11:30:41, `remember_token` = jSMcfpPnCPrKgwqfhB2tEEEd8h8x6d72viz67MbVzBD27A2G7AH8yWQo1ORf where `id` = 1) 
+0

Potete mostrare il percorso? La vista 'users.login' esiste? Perché il tuo codice sembra molto simile al mio metodo di logout ... –

+2

Per ottenere utili informazioni di debug visualizzate sul tuo computer in sviluppo, dovresti aggiungere un '' debug '=> true'' a 'app/config/app.php ''(o' app/config/local/app.php'') e/o aggiungere il nome host della propria macchina di sviluppo all'array-array in 'bootstrap/start.php'. Dai un'occhiata a http://laravel.com/docs/configuration#environment-configuration per maggiori dettagli. – Quasdunk

+0

@ pc-shooter si quella vista esiste. il reindirizzamento funziona bene senza Auth :: logout() – winnyboy5

risposta

51

Potrebbe mancare il remember_token per la tabella degli utenti.

vedere: http://laravel.com/docs/upgrade#upgrade-4.1.26

laravel richiede "remember_token nullable di VARCHAR (100), TESTO, o equivalente al vostro tavolo gli utenti."

Aggiornamento per nuova documentazione

laravel 4.2 e ora ha un metodo che è possibile utilizzare con il generatore di schemi di aggiungere questa colonna.

$table->rememberToken();

Laravel Docs - Schema - Adding Columns

+7

Se stai più in dettaglio, devi modificare il tuo file di migrazione e aggiungere: $ table-> text ('remember_token') -> nullable(); e quindi rieseguire le migrazioni – Heihachi

+0

Si può fare questo in modo automatico come con i timestamp? ($ table-> timestamp();) –

+1

@TomBusby in realtà i documenti per Laravel 4.2 hanno un metodo per questo token ora. $ Tavola-> rememberToken(); – lagbox

1

ecco un codice di esempio da come gestire la disconnessione degli utenti sul mio sistema utilizzando laravel 4. Non sono sicuro perché il vostro non funziona e sarà bello vedere il percorso, e il codice HTML che attiva anche la procedura di logout.

La Strada

Route::get('logout', array('uses'=>'UserController[email protected]')); 

sul pulsante HTML/link innescando la disconnessione

<a href="{{URL::to('logout')}}" class="btn btn-danger btn-sm">Logout</a> 

la funzione di regolazione Gestione della disconnessione

public function logout(){ 

    Auth::logout(); 

    return Redirect::to('login'); 
} 

Ecco qui! Dovresti sostituirlo con i nomi delle rotte e la funzione del controller. Questo dovrebbe funzionare! In caso contrario, pubblica il percorso e il codice html! Saluti!

+0

No, non ha funzionato. Penso che il problema risieda nella funzione getLogout – winnyboy5

+0

Risolto grazie per l'aiuto però ........ :) – winnyboy5

+1

Grande! Sono contento che tu l'abbia risolto! Saluti! – mandeeya

1

dovuto l'aggiornamento laravel corrente dovrebbe esserci un "remember_token" colonna della tabella utente. Questo risolve il problema.

0

ho saputo che stavo ottenendo l'errore di disconnessione nella mia applicazione perché stavo usando

Route::post('logout', array('uses' => '[email protected]')); 

Basta ricordarsi di utilizzare il seguente invece.

Route::get('logout', array('uses' => '[email protected]')); 

Questo ha funzionato senza intoppi.

8

Se avete laravel 4.2 si può fare questo:

riga di comando:

php artisan migrate:make add_remember_token_to_users_table --table="users" 

Dopo questo aprire il file app/database/migrazioni/2014_10_16_124421_add_remember_token_to_users_table e modificarlo in questo modo:

public function up() 
{ 
    Schema::table('users', function(Blueprint $table) 
    { 
     $table->rememberToken(); 
    }); 
} 

public function down() 
{ 
    Schema::table('users', function(Blueprint $table) 
    { 
     $table->dropColumn('remember_token'); 
    }); 
} 
+0

"migrate: make" è sbagliato abbiamo bisogno di tipo "make: migration". Grazie per la risposta. –

0

È necessario aggiungere la colonna updated_at nella tabella SQL user_tbl. Se non desideri usarlo. puoi anche disattivare i timestamp all'interno del tuo modello.

1

per il vostro problema, si può passare valore nullo o si può il vostro valore remember_token nel file php modello come

public $remember_token=false; 
Problemi correlati