2016-11-17 228 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控制台命令跟踪