2017-06-12 74 views
0

證實了不必要的日誌我有一個laravel項目中,我嘗試實施檢查,如果用戶帳戶被激活代碼從用戶的電子郵件證實:檢查,如果用戶帳戶是通過電子郵件的代碼Laravel

public function SignIn(Request $request){ 

     if(Auth::attempt(['email' => $request['email'], 'password' => $request['password']])) { 



      if(Auth::user()->status==false){ 

       Auth::logout(); 
       Session::flash('activationError','First please active your account'); 
       return back(); 

      } 

      return redirect()->route('showDashboardWelcome'); 
     } 

     else{ 

      Session::flash('loginError','Your username and password are wrong'); 
      return back(); 
     } 
    } 

在上面的代碼有從控制器到登錄用戶的功能。此功能檢查用戶電子郵件和密碼是否正確,以及用戶是否已通過電子郵件代碼確認帳戶(具有兩個布爾值的用戶模型中的$ status變量)。

如果賬戶未被用戶確認,我必須從賬戶註銷用戶,因爲功能嘗試同時啓動用戶會話。有沒有任何可能的方式來執行此操作,而無需啓動用戶會話,然後註銷用戶?

我將不勝感激。最好的問候

回答

1

添加一箇中間件來直接查詢用戶表並檢查狀態字段。如果未驗證,則重定向到顯示消息的頁面。例如:

<?php 

namespace App\Http\Middleware; 

use Closure; 

class CheckVerified 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $user = User::where('email', $request->email)->first(); 
     if (!user->status) { 
      return redirect()->back()->with('not verified'); 
     } 

     return $next($request); 
    } 

} 
0

可以,只要你想傳遞儘可能多的參數attempt([])。所以在這裏你可以添加「狀態」到數組這樣

if(Auth::attempt([ 
    'email' => $request['email'], 
    'password' => $request['password'], 
    'status' => true 
])) { 

} 

你傳遞給數組必須滿足每一個參數爲Auth::attemp()啓動會話。

+0

好的,但是您的解決方案還不夠,因爲我不知道當密碼和電子郵件密碼錯誤以及何時未激活帳戶時,如何爲用戶提供消息。 –

+0

然後你可以改變你的登錄邏輯。 1.通過電子郵件獲取用戶。 2.檢查用戶狀態3.登錄用戶。並做了。不需要額外的中間件只需檢查一次。中間件適用於需要檢查大部分時間的內容,例如會話,令牌等。 – EddyTheDove

相關問題