2013-07-22 112 views
3

我有一個Auth.Attempt事件處理程序類,它檢測用戶的登錄嘗試以決定鎖定用戶的帳戶。 但是,當我嘗試將用戶重定向到帶有閃存消息的登錄頁面時,發現重定向不起作用,它仍在繼續執行下一步。 我想中斷事件中的過程並給出我的自定義警告消息。誰能幫我嗎?非常感謝。Laravel Redirect在Event handler/listener中不起作用

我的事件處理程序:

namespace MyApp\Handlers\Security; 

use DB; 
use Session; 
use Redirect; 

class LoginHandler 
{ 
    /** 
    * Maximum attempts 
    * If user tries to login but failed more than this number, User account will be locked 
    * 
    * @var integer 
    */ 
    private $max_attemtps; 

    /** 
    * Maximum attempts per IP 
    * If an IP/Device tries to login but failed more than this number, the IP will be blocked 
    * 
    * @var integer 
    */ 
    private $ip_max_attempts; 

    public function __construct() 
    { 
     $this->max_attempts = 10; 
     $this->ip_max_attempts = 5; 
    } 

    public function onLoginAttempt($data) 
    { 
     //detection process....... 
     // if login attempts more than max attempts 
     return Redirect::to('/')->with('message', 'Your account has been locked.'); 
    } 
} 

現在我這樣做的方法是象下面這樣:

Session::flash('message', 'Your account has been locked.'); 
header('Location: '.URL::to('/')); 

它的工作原理,但我不知道這是否是做完美的方式。

+0

爲什麼'使用重定向;'? –

+0

因爲我不想處理認證。我嘗試在驗證用戶名和密碼之前驗證用戶登錄嘗試。如果用戶的帳戶被鎖定或IP被阻止,則該過程將被終止並用閃光消息重定向到主頁。 – Jonathan

+0

不,我的意思是'使用Redirect'這是一個有效的命名空間? –

回答

3

沒有得到得多進入這個很有趣的討論:

Should exceptions be used for flow control

你可以嘗試建立自己的異常處理程序,並從那裏重定向到登錄頁面。

class FancyException extends Exception {} 

App::error(function(FancyException $e, $code, $fromConsole) 
{ 
    $msg = $e->getMessage();   
    Log::error($msg); 

    if ($fromConsole) 
    { 
     return 'Error '.$code.': '.$msg."\n"; 
    } 

    if (Config::get('app.debug') == false) { 
     return Redirect::route('your.login.route'); 
    } 
    else 
    { 
     //some debug stuff here 
    } 


}); 

而且在你的函數:

public function onLoginAttempt($data) 
{ 
    //detection process....... 
    // if login attempts more than max attempts 
    throw new FancyException("some msg here"); 
} 
+0

我用你的異常處理程序的方法,它很好用!感謝您指出這種優秀模式。 – CyberMonk

+0

謝謝,這幫了我。 –

相關問題