Я использую LumenPassport (https://github.com/dusterio/lumen-passport) и следовал нескольким учебникам, перечисленным здесь.
Я использовал комбинацию этих учебников, а также чертовски поиски в Google и stackoverflow, чтобы добиться того, что ядо сих пор:http://esbenp.github.io/2017/03/19/modern-rest-api-laravel-part-4/
http://esbenp.github.io/2015/05/26/lumen-web-api-oauth-2-authentication/
https://blog.pusher.com/make-an-oauth2-server-using-laravel-passport/
Чего я добился до сих пор1. Использование пароля для получения токена доступа и обновления2. Хранение этих токенов в безопасном файле cookie только для http3. Получение этих токенов в Lumen AuthServiceProvider
Что я не могу сделать1. Получение аутентифицированного пользователя с помощью AccessToken
Я пытаюсь получить доступ к любой из следующих конечных точек:
$router->group(['middleware' => 'auth:api'], function () use ($router) {
$router->get('/', function () use ($router) {return $router->app->version();});
$router->post('/logout', '\App\Auth\LoginController@logout');
});
Я немедленно получу несанкционированную ошибку. После некоторого глубокого погружения ошибкапроисходит от Authenticate.php, который, как я знаю, вызывается после AuthServiceProvider.Я взглянул на AuthServiceProvider и, согласно документации Lumen, так должен выглядеть метод загрузки.Конечно, он использует драйвер «api», и мне пришлось переключить его на «паспорт», чтобы он работал.
AuthServiceProvider.php
public function boot()
{
$this->app['auth']->viaRequest('passport', function ($request) {
// dd("test") // this works
// dd(Auth::user());
// dd($request->user());
// dd(Auth::guard('api')->user());
});
}
Authenticate.php
public function handle($request, Closure $next, $guard = null)
{
if ($this->auth->guard($guard)->guest()) {
$status = Response::HTTP_UNAUTHORIZED;
return response()->json(['success' => false, 'status' => $status, 'message' => 'HTTP_UNAUTHORIZED'], $status);
}
return $next($request);
}
С этого момента я все еще не могу получить какую-либо информацию аутентифицированного пользователя.Я обеспечил доступ к этим конечным точкам через Postman с соответствующими заголовками авторизации.
Причина, по которой мне нужно получить пользователя, заключается в том, что я надеюсь, что в моем методе выхода из системы я смогу затем получить accessTokenэтого аутентифицированного пользователя, отмените токен и удалите куки.
LoginController.php
public function logout()
{
// Get the accessToken from Auth
// Need to fix AuthServiceProvider first
$accessToken = $this->auth->user()->token();
$refreshToken = $this->db
->table('oauth_refresh_tokens')
->where('access_token_id', $accessToken->id)
->update([
'revoked' => true,
]);
$accessToken->revoke();
$this->cookie->queue($this->cookie->forget(self::REFRESH_TOKEN));
}