php - Laravel 5.6 登录尝试失败 - 登录提交时返回方法 RequestGuard::attempt 不存在

标签 php laravel laravel-passport

我已经为我的应用程序实现了多重身份验证,它工作正常,直到它停止。我在互联网上搜索了一个解决方案,但无济于事。所以我确实有管理员登录 Controller 和默认的 Laravel 登录 Controller ,它使用 make:auth 并为用户实现可验证。我的管理员登录工作正常,但用户登录失败并返回此

BadMethodCallException Method Illuminate\Auth\RequestGuard::attempt does not exist.

当我尝试注册用户时也会发生同样的事情,但这次它返回它返回

BadMethodCallException
Method Illuminate\Auth\RequestGuard::login does not exist.

尽管用户注册通过了错误,并且这些字段实际上是从注册表单中填充到用户表中的。由于我使用的是默认身份验证,因此我希望它能够自动登录,我想这就是 attemp 方法出现问题的地方。

必须注意,我在用户模型上为另一个模块使用 Passport。

下面是我的登录 Controller 的样子

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

}

还有我的管理员登录 Controller

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */
    use AuthenticatesUsers;
    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = 'admin/dashboard';
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest:admin', ['except' => 'logout']);
    }
    /**
     * Show the application's login form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showLoginForm()
    {
        return view('admin.admin-login');
    }

    /**
     * Get the guard to be used during authentication.
     *
     * @param Request $request
     * @return \Illuminate\Contracts\Auth\StatefulGuard
     */
    public function login(Request $request)
    {
        // Validate the form data
        $this->validate($request, [
            'email' => 'required|email',
            'password' => 'required|min:8'
        ]);
        // Attempt to log the user in
        if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password])) {
            // if successful, then redirect to their intended location
            return redirect()->intended(route('admin.dashboard'));
        }
        // if unsuccessful, then redirect back to the login with the form data
        return redirect()->back()->with('flash_message_error', 'Invalid Access: Please Login With Your Credentials.');
    }
    public function logout()
    {
        Auth::guard('admin')->logout();
        return redirect('admin')->with('flash_message_error', 'Successfully Logged Out');;
    }

}

这是我的守护配置/auth.php

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
        'admin-api' => [
            'driver' => 'passport',
            'provider' => 'admins',
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | User Providers
    |--------------------------------------------------------------------------
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | If you have multiple user tables or models you may configure multiple
    | sources which represent each model / table. These sources may then
    | be assigned to any extra authentication guards you have defined.
    |
    | Supported: "database", "eloquent"
    |
    */

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

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

    /*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | You may specify multiple password reset configurations if you have more
    | than one user table or model in the application and you want to have
    | separate password reset settings based on the specific user types.
    |
    | The expire time is the number of minutes that the reset token should be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    */

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
        'admins' => [
            'provider' => 'admins',
            'table' => 'password_resets',
            'expire' => 15,
        ],
    ],

];

最后下面是我的用户模型

namespace App;

use App\Modules\Event\Bookings;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Passport\HasApiTokens;
use GrahamCampbell\Markdown\Facades\Markdown;

/**
 * @method static find($user_id)
 * @method static count()
 */
class User extends Authenticatable
{
    use HasApiTokens, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'fname','lname', 'email','organization','phone_number', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',

    ];

    public function participant()
    {
        return $this->hasMany(Bookings::class);
    }


    public function posts()
    {
        return $this->hasMany(Posts::class, 'author_id');
    }
    public function gravatar()
    {
        $email = $this->email;
        $default = "https://upload.wikimedia.org/wikipedia/commons/thumb/5/50/User_icon-cp.svg/200px-User_icon-cp.svg.png";
        $size = 60;

        return "https://www.gravatar.com/avatar/" . md5( strtolower( trim( $email ) ) ) . "?d=" . urlencode( $default ) . "&s=" . $size;
    }
        public function getRouteKeyName()
    {
        return 'slug';
    }
    public function getBioHtmlAttribute()
    {
        return $this->bio ? Markdown::convertToHtml(e($this->bio)) : NULL ;

    }

}

下面是我的管理员模型

namespace App;


use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

/**
 * @method static find($user_id)
 */
class Admin extends Authenticatable
{
    use Notifiable;

    protected $guard = 'admin';
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',

    ];


}

我尝试使用 api 作为默认保护,但它只是暂时起作用并开始返回相同的错误,我知道尝试方法仅适用于 Web 中间件,那么可能是什么问题?我已经删除了供应商文件夹并使用 composer update 重新安装它仍然没有..只是卡住了。 非常感谢您的帮助。

最佳答案

所以为了回答这个问题,我绞尽脑汁,决定清除应用程序、配置和路由缓存,这对我有用。

php artisan cache:clear

当您希望清除应用程序缓存时,可以在控制台中运行上述语句。它的作用是该语句清除 storage\framework\cache 中的所有缓存。

php artisan route:cache

这会清除您的路由缓存。因此,如果您添加了新路由或更改了路由 Controller 或操作,您可以使用它重新加载相同的。

php artisan config:cache

这将清除 env 文件的缓存并重新加载它

终于可以跑了

composer dump-autoload -o

Composer dump-autoload 不会下载任何东西。 它只是重新生成需要包含在项目中的所有类的列表(autoload_classmap.php)。

关于php - Laravel 5.6 登录尝试失败 - 登录提交时返回方法 RequestGuard::attempt 不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53704257/

相关文章:

php - Laravel Passport 路由重定向到登录页面

laravel - 使用 URL 而不是服务名称将服务与 docker compose 连接

php - 我的虚拟主机主目录中的数据库连接

php - 如何删除 anchor 链接中的基本网址(codeigniter)?

php - 尝试使用 laravel 删除值时出错

php - Laravel 群发改 Eloquent

使用外部 Laravel 护照 lumen api 进行 Laravel 客户端身份验证

php - 如何从Firebird数据库读取数据并将数据插入MSSQL数据库?

php - 使用 htaccess 重写 Url 会使搜索引擎发现网站吗?

javascript - 使用本地化时如何在 js 中提供 trans 方法(laravel 5.3)