Laravel - Auth::尝试失败,返回false


Laravel - Auth::attempt doesn't work, return false

我正在尝试在laravel登录,但我正在使用mssql和我的用户表命名为我们。

在config/auth.php中,我更改了提供程序以更改表名:

'providers' => [
    //'users' => [
    //    'driver' => 'eloquent',
    //    'model' => App'User::class,
    //],
    'users' => [
      'driver' => 'database',
      'table' => 'us',
    ]
],
我还创建了一个名为authenticated: 的中间件
public function handle($request, Closure $next)
{
  if(Auth::check())
  {
    return $next($request);
  }
  else {
    return redirect('/login');
  }
}

现在我创建了一个post route/login,现在我正在做所有没有控制器的route:

 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);
  }
});

当我把正确的数据形式$auth获得正确的用户,但在dd(Auth::attempt(['username' => $username, 'codeApp' => $password], $remember));返回false,我不知道为什么。

我怎么解决这个问题?

谢谢

问题是,在Route::post('/login', function() {}您为变量赋了错误的值

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

因为您对."</br>"进行了额外的连接,所以在结果中您试图使用损坏的凭据进行验证。要解决这个问题,只需删除该连接。

还有一件事-您不需要像您那样对DB进行额外的查询,然后检查结果:

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

仅仅是因为你已经使用验证规则检查了提供者user和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控制台命令

进行跟踪