【问题标题】:Call to undefined method Illuminate\Auth\TokenGuard::attempt()调用未定义的方法 Illuminate\Auth\TokenGuard::attempt()
【发布时间】:2017-09-01 15:12:36
【问题描述】:

我收到此错误:

调用未定义的方法 Illuminate\Auth\TokenGuard::attempt()

从此代码:

if(Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)){
            return redirect()->intended(route('admin.dashboard'));
        }else{

我已经导入了Illuminate\Support\Facades\Authas the docs suggest

我的auth.php 可能会有所帮助

<?php

return [

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
        'admin-api' => [
            'driver' => 'token',
            'provider' => 'admins',
        ],
    ],
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class,
        ],
    ],
    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
        'admins' => [
            'provider' => 'admins',
            'table' => 'password_resets',
            'expire' => 15,
        ],
    ],
];

【问题讨论】:

  • 您的控制器中是否定义了 Auth::guard() 方法?看起来它正在尝试使用 api 保护之类的令牌保护之一,而不是您的管理员保护。

标签: php laravel


【解决方案1】:

我认为您可能正在尝试使用“会话”保护驱动程序而不是“令牌”。所以,尝试这样做:

config/auth.php配置文件中:

'admin-api' => [
    'driver' => 'token',
    'provider' => 'admins',
],

你必须把它改成

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

那么你应该运行:

 php artisan cache:clear
 php artisan config:cache

再试一次。祝你好运!

【讨论】:

  • 这对实际尝试使用令牌保护驱动程序而不是会话保护驱动程序的人没有帮助。
  • 如果你的 serve 命令在终端中运行,首先取消它然后运行缓存清除命令。
【解决方案2】:

令牌守卫没有尝试方法,这是用于会话身份验证的功能。所以你需要自己授权用户或者使用 Laravel Passport 认证https://laravel.com/docs/6.x/passport

【讨论】:

猜你喜欢
  • 2020-07-06
  • 2020-02-26
  • 2020-04-07
  • 1970-01-01
  • 2018-08-08
  • 2020-01-24
  • 2016-06-25
  • 2017-07-14
  • 2017-11-06
相关资源
最近更新 更多