Ошибка с аутентифицированным пользователем, использующим охрану и может получить доступ к некоторой модели - PullRequest
0 голосов
/ 07 февраля 2020

Я использую lighthouse- php для создания API-интерфейса graphql, и у меня возникают проблемы при смене директивы промежуточного программного обеспечения (в новых версиях она устарела) для защиты.

extend type Query @middleware(checks: ["auth:api"]) {
    task(id: ID @eq): Task @can(ability: "view" find:"id") @find
    mytasks: [Task!]!
}

Использование этого код работает хорошо. Я имею в виду, что система проверяет, вошел ли пользователь в систему, и проверяет на соответствие политике доступ пользователя к своей задаче, но когда я пытаюсь изменить директиву @middleware на директиву @guard, например:

extend type Query @guard(with: ["api"]){
    task(id: ID @eq): Task @can(ability: "view" find:"id") @find
    mytasks: [Task!]!
}

Всегда возвращайте, что пользователь не аутентифицирован. Но в последнем случае, если я удаляю директиву @can, система проверяет, вошел ли пользователь в систему или нет (но мне нужно проверить соответствие политике, если пользователь может получить доступ к указанной задаче).

I ' Я использую следующие версии пакетов:

"joselfonseca/lighthouse-graphql-passport-auth": "^3.0",
    "laravel/framework": "^6.2",
    "laravel/passport": "^8.2",
    "laravel/tinker": "^2.0",
    "mll-lab/laravel-graphql-playground": "^2.0",
    "nuwave/lighthouse": "^4.8"

Кто-нибудь экспериментировал с этой проблемой? спасибо.

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Тем временем я нашел другое решение, упомянутое в документации:

https://lighthouse-php.com/master/security/authentication.html#global

Короче говоря, мне нужно было добавить промежуточное ПО AttemptAuthentication в конфиг маяка. Я использую это с @auth (guard: "api"), добавленным ко всем моим типам.

0 голосов
/ 20 апреля 2020

Я решил это.

мы должны настроить файл config / auth. php со следующим:

/*
|--------------------------------------------------------------------------
| Authentication Defaults
|--------------------------------------------------------------------------
|
| This option controls the default authentication "guard" and password
| reset options for your application. You may change these defaults
| as required, but they're a perfect start for most applications.
|
*/

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

/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
| Next, you may define every authentication guard for your application.
| Of course, a great default configuration has been defined for you
| here which uses session storage and the Eloquent user provider.
|
| 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.
|
| Supported: "session", "token"
|
*/

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

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
        'hash' => false,
    ],
],
...