[PHP] 自定義 laravel/passport 的誤區講解


 

Passport 的 Client 模型對應用戶是默認的 User 模型、使用的 guards 是 api。

如果你發現自定義 passport 時總是調試不成功,那么很有可能是以下原因。

 

    /**
     * Get the user that the client belongs to.
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function user()
    {
        return $this->belongsTo(
            config('auth.providers.'.config('auth.guards.api.provider').'.model')
        );
    }

 

Passport 如果要替換 Users,需要修改 config/auth.php 中 guards.api.provider 的值,並且增加新的 auth.providers。

 

Passport 如果打算新增 guards 來替換默認使用的 api,需要覆寫 Client 模型的上面代碼部分、並在 AuthServiceProvider 中啟用新模型。 

https://laravel.com/docs/6.x/passport#overriding-default-models

 

config/auth.php example:

// Used by laravel/passport Client, see app/Client.php
'oauth' => [
    'driver' => 'passport',
    'provider' => 'members',
    'hash' => false,
],

 

 app/Providers/AuthServiceProvider.php example:

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

    Passport::routes();

    Passport::useTokenModel(Token::class);
    Passport::useClientModel(Client::class);
    Passport::useAuthCodeModel(AuthCode::class);
    Passport::usePersonalAccessClientModel(PersonalAccessClient::class);
}

 

注意,自定義的用戶表 model 依舊需要繼承自 \Illuminate\Foundation\Auth\User,而不是默認的 Illuminate\Database\Eloquent\Model。

 

調試接口:

 [PHP] 自定義 laravel/passport 的誤區講解

 

驗證接口:

 [PHP] 自定義 laravel/passport 的誤區講解

使用 auth:api 作為 middleware,根據配置的 passport 驅動,內部 guard 根據 token 傳遞方式進行 BearerToken(JWT) 或者 Cookie 驗證,驗證通過后會在 $request 附上相關用戶信息 oauth_access_token_id、oauth_client_id、oauth_user_id、oauth_scopes。

 

[PHP] 淺談 Laravel Authentication 的 auth:api

[PHP] 淺談 Laravel Authentication 的 guards 與 providers

[PHP] 淺談 Laravel 三大驗證方式的區別, auth:api, passport, auth:airlock

Link:https://www.cnblogs.com/farwish/p/12222377.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM