Используйте REST API для входа пользователей - PullRequest
1 голос
/ 06 марта 2019

У меня есть проект REST API, который обслуживает некоторые защищенные ресурсы.Когда пользователь хочет взаимодействовать с de API, сначала необходимо пройти аутентификацию в нем.

Для аутентификации пользователей у API есть одна конечная точка /tokens, которая получает учетные данные и в случае успеха отправляет в ответ Json Web.Токен.

Теперь мне нужно реализовать форму входа в MVC-проект Laravel 5.8, которая позволит пользователям API обмениваться веб-токеном Json.Чтобы сделать это, я подумал о расширении модуля аутентификации (создание пользовательского провайдера), но у меня ничего не получилось.

Во-первых, я создал и зарегистрировал новый класс провайдеров пользователей:

app / Services / Auth / BeonweUserProvider.php

use Illuminate\Contracts\Auth\UserProvider;
use Illuminate\Contracts\Auth\Authenticatable;

class BeonweUserProvider implements UserProvider
{
    public function retrieveByCredentials(array $credentials)
    {
       // Makes an API call and retrive the JWT.
       // Return an Authenticatable
    }

    public function validateCredentials(Authenticatable $user, Array $credentials)
    {
       // The API did it ...
       return true;
    }
}

app / Providers / AuthServiceProvider.php

public function boot()
{
   $this->registerPolicies();

   Auth::provider('BeonweUser', function ($app, array $config) {
      $authenticable = 'App\Services\Auth\AuthenticatedUser';
      return new BeonweUserProvider($app->make($authenticable));
   });
}

config / auth.php

'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],    
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'beonwe',
    ],
 ],
'providers' => [
    'beonwe' => [
        'driver' => 'BeonweUser'
    ]
 ]

После этого я создаю простой класс Authenticable User:

class AuthenticatedUser extends User implements Authenticatable
{
    protected $access_token;

    public function getAuthIdentifierName()
    {
        return 'access_token';
    }


    public function getAuthIdentifier()
    {
        return $this->{$this->getAuthIdentifierName()};
    }
}

Когда пользователь отправляет форму входа в систему, провайдер пользователя выбираетуспешно получить токен доступа и вернуть экземпляр Authenticable.В значении сессии, я могу видеть правильный JWT

login_web_59ba36addc2b2f9401580f014c7f58ea4e30989d => eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NTE4ODQ4NDIsImV4cCI6MTU1MTkxNzI0MiwidWlkIjoxLCJhaWQiOm51bGwsInR5cGUiOiJzdGFuZGFyZCJ9.G6lmrC-nEZWNWn6XIq9Du_GHtq5xJkNfWM5zpiDg31M

Но Laravel, снова перенаправляет на форму авторизации.Любые идеи?

Примечание: я использую LoginController, предоставленный Laravel fresh install.

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