使用Laravel/Passport 進行API認證二
阿新 • • 發佈:2019-02-17
一、如果用來認證的使用者表不是預設的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這樣,就會以login_name作為使用者名稱來驗證使用者登入。findForPassport($identifier) { return self::orWhere('login_name', $identifier)->first(); }
三、如果使用者表的主鍵不是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(); }); }
-完-