Настройте Laravel Passport, чтобы его можно было использовать с собственными моделями + JWT - PullRequest
0 голосов
/ 22 декабря 2018

Я хотел бы использовать JWT с Laravel Passport для моего собственного API, но использовать свои собственные таблицы / модели.Информация, которую я нашел до сих пор, только подробно описывает установку / настройку по умолчанию или является неполной.

Я новичок в Passport, но уже нашел информацию о том, как пропустить миграцию Passport, добавив «Passport :: IgnoreMigrations ()»к app / Providers / AppServiceProvider.php.

Я также нашел информацию о «findForPassport» и «validateForPassportPasswordGrant», где я могу переопределить, где он получит имя пользователя / пароль, но нет полных примеров, которые можно найти где-либо, простобиты и кусочки.

Я всегда могу пойти на jwt-auth, но везде я нахожу людей, говорящих, что Passport - это официальный путь, и я думаю, что это более надежное будущее для использования Passport.

В Интернете можно найти множество примеров того, как настроить Passport, и все это выглядит очень просто, но если я не хочу использовать таблицы / модели по умолчанию, найти информацию становится очень сложно.Мой API работает без аутентификации, и я сделал первые части, чтобы добавить паспортную аутентификацию:

composer require laravel/passport

Adding the proper service provider

Пропустить php artisan passport: установить, иначе он попытается добавить данные в таблицы, которых там нет, поэтому я просто генерируюключи:

php artisan passport:keys

В моем маршруте / api.php я добавил все маршруты к промежуточному программному обеспечению:

Route::middleware('auth:api')->group( function () {
  ...
}

Я также изменил свой config / auth.php:

'guards' => [
   'api' => [
      'driver' => 'passport',
      'provider' => 'User',
   ],
],

Обратите внимание, что моя модель - Пользователь с пользователями таблицы.Вот фрагмент моей миграции:

Schema::create('users', function (Blueprint $table) {
            $table->increments('userid');                                   /* User ID */
            $table->string('username', 30);                          /* Username */
            $table->string('password', 64);                          /* Password */
            $table->string('firstname', 100);                        /* First name */
            $table->string('lastname', 100);                         /* Last name */
            $table->string('email', 128);                            /* Email address */
            $table->binary('avatar')->nullable(true);                 /* Picture of user */
            $table->string('phone',30);                              /* Phone number */
            $table->unsignedInteger('deptid')->nullable(true);        /* Department ID */
            /* Note that there is a foreign key needed for the department ID but since the order matters in the creation
               of the tables I will create a separate migrations file for the foreign keys */
            $table->string('timezone', 32);                          /* Local timezone of the user */
            $table->boolean('active');                                      /* Is the user active (true) / inactive (false) */
            $table->dateTime('lastlogon')->nullable(true);            /* Last logon date/time */
            $table->unsignedInteger('created_by')->nullable(true);    /* Which user ID created the record */
            $table->unsignedInteger('updated_by')->nullable(true);    /* Which user ID updated the record */
            $table->timestamps();                                                   /* Timestamps - created_at / updated_at */
        });

Мне нужно будет добавить токен и дату / время истечения срока, но я не знаю, как действовать дальше.

Как я могу переопределитьостальные, чтобы это работало?Я хочу вернуть веб-токен (при успешном входе в систему), чтобы его можно было использовать для всех запросов API.Добавление дополнительного кода для проверки того, что веб-токен все еще действителен для каждого запроса, не должно быть такой большой работой.И все это без использования таблиц по умолчанию, которые использует Passport.

1 Ответ

0 голосов
/ 02 января 2019

Например, если вы не хотите использовать «пользовательскую» модель и хотите использовать любую другую модель для аутентификации.Выполните следующие шаги

При дефилировании этой модели в классе и поставщике в config / auth.php

'guards' =>[
 ......
'customer' => [
            'driver' => 'passport',
            'provider' => 'customer',
     ],
]
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'customer' => [
        'driver' => 'eloquent',
        'model' => App\Customer::class,
    ],

Создайте новое промежуточное программное обеспечение "CustomerProvider.php" и проверьте аутентификацию. Определите его в приложении/http/kernal.php

 'customerapi' => \App\Http\Middleware\PassportCustomProvider::class,

По маршруту api.php

Route::middleware('auth:api')->group( function () {
  ...
}
...