【问题标题】:Laravel - Auth::attempt doesn't work, return falseLaravel - Auth::attempt 不起作用,返回 false
【发布时间】:2017-03-31 22:51:51
【问题描述】:

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

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

}

现在我创建了一个发布路由 /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);
  }
});

当我将正确的数据放入 $auth 表单时,会获得正确的用户,但在 dd(Auth::attempt(['username' =&gt; $username, 'codeApp' =&gt; $password], $remember)); 返回 false,我不知道为什么。

我该如何解决?

谢谢

【问题讨论】:

    标签: php laravel authentication laravel-5.3


    【解决方案1】:

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

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

    因为您对."&lt;/br&gt;" 进行了额外的串联,因此您尝试使用损坏的凭据进行身份验证。 要解决,只需删除该连接即可。

    还有一件事——你不需要像你一样对数据库进行额外的查询然后检查结果:

    $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 控制台命令跟踪该文件

    【讨论】:

      猜你喜欢
      • 2014-10-23
      • 2017-05-11
      • 2019-05-24
      • 2014-11-22
      • 1970-01-01
      • 2015-03-03
      • 2016-09-12
      • 2017-05-24
      • 2013-06-11
      相关资源
      最近更新 更多