2014-02-27 253 views
0

My Laravel是全新安裝。Laravel - 登錄進行身份驗證

routes.php文件

Route::get('/', '[email protected]'); 

Route::get('login', '[email protected]'); 

Route::get('call', '[email protected]')->before('auth'); 

MainController.php

class MainController extends Controller { 

    public function idle() { 
     return Response::json('idle'); 
    } 

    public function login() { 
     $user = array(
     'username' => Input::get('username'), 
     'password' => Input::get('password') 
    ); 

     if (Auth::attempt($user)) { 
     return Redirect::intended(); 
     } else { 
     return Redirect::route('login'); 
     } 
    } 

    public function call() { 
     $users = User::all(); 
     return $users; 
    } 

} 

filters.php

Route::filter('auth', function() 
{ 
    if (Auth::guest()) return Redirect::guest('login'); 
}); 

請求:

http://l0calhost/survey/public/login

InvalidArgumentException 
Route [login] not defined. 

爲什麼它說,這是沒有定義?

回答

1

是的,因爲你增加了一個AUTH過濾

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

Laravel會假設你有一個路線

Route::get('login', ...); 

你會發現這樣的事情在你的filters.php文件,你可以把它改成什麼最好給你:

Route::filter('auth', function() 
{ 
    if (Auth::guest()) return Redirect::guest('login'); 
}); 

你必須命名你的路線:

Route::get('login', array('as' = 'login', 'use' => '[email protected]')); 
+0

感謝:D我只是想通了。什麼是'guest()'功能?你能發佈一個鏈接到最佳實踐身份驗證登錄功能嗎?但我仍然不確定:我需要'Route :: get('login')'還是應該在哪裏用'attempt()'等登錄?謝謝! – Patrick

+0

'Auth :: guest()'檢查用戶是否是訪客,如果用戶當前登錄,它將返回false,因爲他/她不是訪客。 –

+0

不,我的意思是'Redirect :: guest',但是我發現它保存了當前的請求以後再被調用。 – Patrick