2017-04-15 86 views
2

我正在完成我的工作,但我的客戶需要更多管理用戶的功能,例如暫停帳戶或凍結帳戶,我非常確定可以很容易地做到這一點:https://laravel.com/docs/5.4/authentication#authenticating-users,但我已經使用默認php artisan make:auth身份驗證。我的問題是,可以在用戶登錄時添加更多支票,如if active == true或類似的東西?謝謝!如何使用Laravel在現有默認身份驗證上創建自定義身份驗證

回答

2

在laravel 5.4,您可以使用AuthenticatesUsersauthenticated登錄後鉤做你的自定義驗證。

protected function authenticated(Request $request, $user) { 

    if($user->active){ 
     return redirect()->intended($this->redirectPath()); 
    } 

    $this->guard()->logout(); 

    $request->session()->flush(); 

    $request->session()->regenerate(); 

    return redirect()->back() 
        ->withInput($request->except('password')) 
        ->withError('Please activate your account.') 
} 
+0

我不知道爲什麼我對這個答案比另一個感興趣,但是我應該把你給的代碼放在哪裏?在LoginController上? –

+0

是的。檢查你的'LoginController',必須有'使用AuthenticatesUsers'語句。所以你只是重寫'AuthenticatesUsers'特徵的'authenticated'方法。 –

+0

我粘貼到LoginController的整個代碼,但沒有不同的用戶仍然可以登錄,甚至活動是false:/ –

2

您可以按自己的騎現有的登錄功能是這樣的:

public function postLogin(Request $request) 
{ 
    $this->validate($request, [ 
     'email' => 'required|email', 'password' => 'required', 
    ]); 

    $credentials = $this->getCredentials($request); 

    // This section is the only change 
    if (Auth::validate($credentials)) { 
     $user = Auth::getLastAttempted(); 
     if ($user->active) { 
      Auth::login($user, $request->has('remember')); 
      return redirect()->intended($this->redirectPath()); 
     } else { 
      return redirect($this->loginPath()) // Change this to redirect elsewhere 
       ->withInput($request->only('email', 'remember')) 
       ->withErrors([ 
        'active' => 'You must be active to login.' 
       ]); 
     } 
    } 

    return redirect($this->loginPath()) 
     ->withInput($request->only('email', 'remember')) 
     ->withErrors([ 
      'email' => $this->getFailedLoginMessage(), 
     ]); 

} 

而且你還可以做修改,根據自己的需要。

感謝

+0

在laravel 5.4,沒有'postLogin'方法。 –

+0

@PankitGami你可以創建你自己的/登錄路線,然後使用這種方法登錄用戶 –

+0

是的,我們可以但我們不會得到油門限制和所有這些。 laravel的登錄方法帶有節流和其他檢查。 我建議使用AuthenticatesUsers特徵的'authenticated'鉤子。 –

2

將這個功能在你的LoginController

public function postLogin(Request $request) 
{ 
    $credentials = $request->only('email', 'password'); 
    $user=User::whereEmail($credentials['email'])->first(); 
    if (!empty($user) && $user->active) { 
     if (Auth::attempt($credentials)) { 
      return redirect()->intended($this->redirectPath()); 
     } else { 
      return redirect($this->loginPath()) 
       ->withInput($request->only('email', 'remember')) 
       ->withErrors(['email' => $this->getFailedLoginMessage()] 
       ); 
     } 
    } else { 
     return redirect($this->loginPath()) 
      ->withInput($request->only('email', 'remember')) 
      ->withErrors(['email' => $this->getFailedLoginMessage()] 
      ); 
    } 
} 

public function loginPath() 
{ 
    return property_exists($this, 'loginTo') ? $this->redirectTo : '/login'; 
} 


protected function getFailedLoginMessage() 
{ 
    return Lang::has('auth.failed') 
     ? Lang::get('auth.failed') 
     : 'set here your custom message.'; 
} 
相關問題