1. 程式人生 > >使用Laravel/Passport 進行API認證二

使用Laravel/Passport 進行API認證二

一、如果用來認證的使用者表不是預設的users怎麼辦?

1,在config/auth.php中新建一個provider

'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],'store_admins' => [
'driver' => 'eloquent',
'model' => App\Models\StoreUser::class,
],
],

2,修改guards中api的provider為剛才新建的那個。

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

那個Model : StoreUser要自己建。

二、如果用來認證的欄位不是預設的email怎麼辦?

在對應的model檔案中新增一個方法。

/**
 * customize username field
 *
 * @param $identifier
 * @return mixed
 */
public function 
findForPassport($identifier) { return self::orWhere('login_name', $identifier)->first(); }
這樣,就會以login_name作為使用者名稱來驗證使用者登入。

三、如果使用者表的主鍵不是int型,而是uuid怎麼辦?

需要修改oauth_access_tokens表中的user_id欄位的型別改成uuid.

建立個migration

php artisan make:migration alter_table_oauth_access_tokens

可以先刪除user_id,再建一個新的user_id,型別是uuid.

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('oauth_access_tokens', function (Blueprint $table) {
$table->dropColumn('user_id');
});
Schema::table('oauth_access_tokens', function (Blueprint $table) {
$table->uuid('user_id')->index()->nullable();
});
}

-完-