2016-12-25 137 views
1

我困在我的項目中。我希望用戶可以用電子郵件或手機號登錄。這工作非常好。但現在我希望只有活躍的用戶才能用電子郵件或手機號登錄。我的數據庫中有一個活動字段,如果用戶處於活動狀態,或者用戶處於非活動狀態,則設置爲1,但設置爲0,但不知道如何執行此操作。請大家幫我解決這個問題。我正在使用laravel 5.3。Laravel身份驗證不能在laravel中正常工作5.3

LoginController代碼

<?php 
namespace App\Http\Controllers\Auth; 
use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\AuthenticatesUsers; 

class LoginController extends Controller 
{ 
    use AuthenticatesUsers; 
    protected $redirectTo = '/home'; 
    public function __construct() 
    { 
     $this->middleware('guest', ['except' => 'logout']); 
    } 
    protected $username = 'email'; 
    public function loginNameOrEmail(Request $request) 
    { 
     $field = filter_var($request->input('email'), FILTER_VALIDATE_EMAIL) ? 'email' : 'mobile'; 
     $request->merge([$field => $request->input('email')]); 
     $this->username = $field; 
     return $this->login($request);  
    } 
    public function username() 
    { 
     return $this->username; 
    } 
    protected function authenticated($request, $user) 
    { 
     if($user->is_admin == 1) { 
      return redirect()->intended('dashboard'); 
     } 
     return redirect()->intended('/home'); 
    } 
} 

回答

1

您也可以在除了用戶的電子郵件和密碼添加額外的條件,認證查詢。例如,我們可以驗證用戶標記爲「主動」:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) { 
    // The user is active, not suspended, and exists. 
} 

更新

最簡單的方法是重寫credentials方法:

protected function credentials(Request $request) { 

     $request['active'] = 1; 
     return $request->only($this->username(), 'password', 'active'); 
} 

添加這種方法在你的LoginController

Docs

+0

如果我添加此它給了我錯誤的LoginController.php線47 FatalErrorException: 類「應用程序\ HTTP \ \控制器驗證\驗證」未找到@艾米特 –

+0

我怎麼能覆蓋'登錄「方法。你會舉一些例子嗎? –

+0

如果我覆蓋它,它給了我錯誤,我不能用電子郵件或移動登錄沒有 –