FatalThrowableError при использовании настраиваемой защиты для аутентификации API в laravel - PullRequest
0 голосов
/ 27 июня 2018

Я продолжаю получать исключение FatalThrowableError или BadMethodCallException каждый раз, когда я пытаюсь аутентифицироваться с помощью драйверов token или passport соответственно в моем пользовательском контроле (api-users), однако с драйвером сеанса это работает просто хорошо. Я определил охрану в соответствии с документами, но все еще безрезультатно, я не понимаю, где я иду не так

Код

Config \ auth.php

'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],

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

    'api' => [ //<== this is not being used as far as i know
        'driver' => 'token',
        'provider' => 'users',
    ],

    'api-users' => [  //<== I am trying to use this guard 
        'driver' => 'session', //<== session works, token or passport doesn't
        'provider' => 'api-users',
    ],
],

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

    'api-users' => [
        'driver' => 'eloquent',
        'model' => App\Models\ApiUser::class,
    ],
],

AuthController.php

class AuthController extends Controller
{
    protected function guard()
    {
        return Auth::guard('api-users');
    }

    protected function attemptLogin(Request $request)
    {
        return $this->guard()->attempt($this->credentials($request), false);
    }

    protected function credentials(Request $request)
    {
        return $request->only('email', 'password');
    }

    public function login(Request $request)
    {
        if ($this->attemptLogin($request)) { //<== this doesn't work with token/passport driver but works with a session driver
            echo 'success';
        } else {
            echo "fail";
        }
    }
}

Модель \ ApiUser.php

class ApiUser extends Authenticatable
{
    use SoftDeletes;
    use Notifiable;
    use HasApiTokens;

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

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

    /**
     * Type cast the active field
     */
    protected $casts = [
        'active' => 'boolean',
    ];
}

Ошибка

При использовании токена в качестве драйвера

Call to undefined method Illuminate\Auth\TokenGuard::attempt()

при использовании паспорта в качестве водителя

Method Illuminate\Auth\RequestGuard::attempt does not exist.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...