【问题标题】:Not able to authenticate in laravel无法在 laravel 中进行身份验证
【发布时间】:2018-07-01 18:02:16
【问题描述】:

我在 Laravel 最新的身份验证中遇到此错误

传递给 Illuminate\Auth\SessionGuard::__construct() 的参数 2 必须 是 Illuminate\Contracts\Auth\UserProvider 的一个实例,给定 null, 叫进来 G:\xampp\htdocs\newrestaurantcrm\vendor\laravel\framework\src\Illuminate\Auth\AuthManager.php

谁能告诉我这个错误为什么会发生这个错误? 我在Auth\AuthController.php 文件中使用以下代码进行身份验证

protected function login(Request $request) {
    $email = $request->email;
    $password = bcrypt($request->password);
    if (Auth::login(['email' => $email, 'password' => $password])) {
        return redirect()->intended('/admin/dashboard');
    }
}

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    将您的代码更改为

    public function login(Request $request) {
        $email = $request->get('email');
        $password = $request->get('password');
        if (Auth::attempt(['email' => $email, 'password' => $password])) {
            return redirect()->intended('/admin/dashboard');
        }
    }
    

    我将protected 更改为public,将Auth::login() 更改为Auth::attempt()。如果您使用login,您实际上必须传递您喜欢登录的User object。您无需加密密码即可通过尝试和。为了使这更简单,您可以编写

    public function login(Request $request) {
        if (Auth::attempt($request->only('email', 'password'))) {
            return redirect()->intended('/admin/dashboard');
        }
    }
    

    这当然假设您的表单具有正确的字段名称,emailpassword,并且在 users 表中也有相同的字段 emailpassword

    【讨论】:

      【解决方案2】:

      当您针对emailpassword 对用户进行身份验证时,请使用Auth::attemptAuth::once对于单个请求)。当我们有用户实例并且我们想使用该用户实例登录时,我们使用Auth::login。对于您的情况,请像这样使用Auth::attempt

      public function login(Request $request) {
          $email = $request->email;
          $password = bcrypt($request->password);
          if (Auth::attempt(['email' => $email, 'password' => $password])) {
              return redirect()->intended('/admin/dashboard');
          }
      }
      

      详情:https://laravel.com/docs/5.6/authentication#included-authenticating

      【讨论】:

      • 纯文本密码被传递给attempt
      • @lagbox 已加密$password = bcrypt($request->password);请仔细检查
      • 我已经尝试了你们提供的两种解决方案,但仍然是同样的问题
      • @AdarshBhatt 你可以尝试将protected 更改为public 吗?如果这不起作用,请发布您有问题的User 模型
      • 现在我收到此错误“传递给 Illuminate\Auth\SessionGuard::login() 的参数 1 必须是 Illuminate\Contracts\Auth\Authenticatable 的实例,给定数组,
      猜你喜欢
      • 2016-01-11
      • 2021-02-08
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多