Принимая идентификатор из токена, чтобы я мог проверить, является ли пользователь владельцем ресурса Passport Laravel - PullRequest
0 голосов
/ 08 июля 2019

Я использую паспорт для oauth-аутентификации с токеном:

Route::middleware('auth:api') ->group (function(){
 //my routes
}

Но в моем методе обновления я хочу сначала проверить, является ли аутентифицированный пользователь владельцем ресурса.Я использую Lcobucci \ JWT \ Parser, чтобы получить идентификатор пользователя:

$value = $request->bearerToken();
$id = (new Parser())->parse($value)->getHeader('jti');

Но я не знаю, где разместить этот код.Весной я взял идентификатор в промежуточном программном обеспечении и сохранил его в контексте безопасности, а затем я мог получить к нему доступ в своих функциях из контекста безопасности.Как я могу расширить промежуточное программное обеспечение auth: api и его средства защиты, чтобы сохранить идентификатор моего пользователя?

1 Ответ

1 голос
/ 09 июля 2019

То, что вы пытались сделать с токеном, делается под капотом, когда вы помещаете промежуточное ПО auth:api в маршрут и вызываете его, предоставляя токен на предъявителя.

Если вы покопаетесь в исходном коде, основная «точка входа» для проверки токена находится в промежуточном программном обеспечении Authenticate, которое просто вызывает Auth::check(). Это приведет к проверке аутентифицированного пользователя в используемой вами системе аутентификации (в вашем случае - Passport). Он проанализирует токен и получит пользователя authd.

Но когда вы используете промежуточное программное обеспечение auth:api, вы всегда можете получить зарегистрированный пользовательский экземпляр на вашем контроллере, не отправляя токен самостоятельно.

Для этого у вас есть несколько способов:

  1. Через фасад Auth: Auth::user()->id или напрямую Auth::id()
  2. Через экземпляр запроса: $request->user()->id.

Примечание: вы можете получить экземпляр запроса также с помощью фасада Request или вспомогательного метода request().

В любом случае пользовательский метод выдаст вам аутентифицированный в данный момент пользовательский экземпляр. Затем вы можете получить атрибут id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...