2016-11-17 168 views
0

我想在laravel做一個登錄,但我使用mssql和我的用戶表命名我們。Laravel - 身份驗證::嘗試不起作用,返回false

在配置/ auth.php我改變了供應商更改表名稱:

'providers' => [ 
    //'users' => [ 
    // 'driver' => 'eloquent', 
    // 'model' => App\User::class, 
    //], 

    'users' => [ 
     'driver' => 'database', 
     'table' => 'us', 
    ] 
], 

我還創建了一個名爲身份驗證的中間件:

public function handle($request, Closure $next) 
{ 
    if(Auth::check()) 
    { 
    return $next($request); 
    } 
    else { 
    return redirect('/login'); 
    } 

} 

現在創建帖子路線/登錄現在我在沒有控制器的路上做所有的事情:

Route::post('/login', function() 
{ 
    echo "login..."; 
    $username = Input::get('username')."</br>"; 
    $password = Input::get('password')."</br>"; 
    $remember = Input::get('remember')."</br>"; 


    $userdata = array(
    'username' => Input::get('username'), 
    'codeApp' => Input::get('password') 
); 
    $rules = array(
     'username' => 'required|exists:us,username', 
     'codeApp' => 'required|exists:us,codeApp' 
); 

    $validator = Validator::make($userdata, $rules); 

    if ($validator->passes()) 
    { 
    $auth = DB::table('us')->where('username', '=', Input::get('username')) 
     ->where('codeApp', '=', Input::get('password'))->get()->first(); 
    // Try to log the user in. 
    if ($auth) 
    { 
     // Redirect to homepage 
     //Auth::login($auth); 
     dd(Auth::attempt(['username' => $username, 'codeApp' => $password], $remember)); 
     if(Auth::attempt(['username' => $username, 'codeApp' => $password], $remember)) 
     { 
      echo "ok"; 
      return Redirect::to('app/groups'); 
     } 

    } 
    } 
    else 
    { 
    echo "error"; 
    return Redirect::to('login')->withErrors($validator); 
    } 
}); 

當我把correc t數據以$ auth的形式獲取正確的用戶,但在dd(Auth::attempt(['username' => $username, 'codeApp' => $password], $remember));返回false,我不知道爲什麼。

我該如何解決這個問題?

感謝

回答

1

的問題是,在Route::post('/login', function() {} 你的變量

$username = Input::get('username')."</br>"; 
$password = Input::get('password')."</br>"; 
$remember = Input::get('remember')."</br>"; 

,因爲你這樣的結果由."</br>"額外拼接你試圖用損壞的要權威性分配錯誤的值證書。 要解決簡單地刪除該串聯。

還有一件事 - 你不需要作出額外的查詢到數據庫,然後檢查結果像你這樣的:

$auth = DB::table('us')->where('username', '=', Input::get('username')) 
     ->where('codeApp', '=', Input::get('password'))->get()->first(); 
    // Try to log the user in. 
    if ($auth) 
    {} 

僅僅是因爲你已經檢查了供應商的用戶和appCode存在使用驗證規則

$rules = array(
     'username' => 'required|exists:us,username', 
     'codeApp' => 'required|exists:us,codeApp' 
); 

所以經過驗證檢查,只是讓Auth::attempt(...)和你做。

並使您的代碼更好地用相應的變量替換您的所有Input :: get('...')調用。

還有一忠告 - 不要echo調試應用程序流 - 使用\Log::debug('Whatever you want to debug')寫入到Laravel的日誌文件,你可以用tail -f ./storage/logs/laravel.log控制檯命令跟蹤