日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

Laravel開發(fā):如何使用Laravel Sanctum為SPA提供API身份驗證?

隨著單頁應(yīng)用程序(SPA)的流行,我們需要一種可靠的方法來保護我們的API免受未經(jīng)授權(quán)的訪問和攻擊。Laravel Sanctum是Laravel提供的一個輕量級的認證系統(tǒng),它為SPA提供輕松的身份驗證。本文將向您展示如何使用Laravel Sanctum為SPA提供API身份驗證。

使用Laravel Sanctum

Laravel Sanctum是Laravel 7.x版本中的一個官方包,用于API身份驗證。Laravel Sanctum使用該API的Token來識別用戶身份,并且可以通過使用token輕松執(zhí)行多個身份驗證的構(gòu)建。

安裝Laravel Sanctum

首先,需確保已安裝Laravel框架。

要安裝laravel sanctum,可以使用以下命令

composer require laravel/sanctum

登錄后復(fù)制

將ServiceProvider添加到config/app.php文件的providers列表中。

'providers' => [
    // ...
    LaravelSanctumSanctumServiceProvider::class,

],

登錄后復(fù)制

現(xiàn)在,可以運行以下命令發(fā)布必要的數(shù)據(jù)庫遷移和Sanctum配置。

php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"

登錄后復(fù)制

執(zhí)行以下命令以運行遷移:

php artisan migrate

登錄后復(fù)制

使用Sanctum進行默認身份驗證

Sanctum包含API和單頁應(yīng)用程序身份驗證的默認實現(xiàn)。可以通過為用戶模型使用SanctumTraitsHasApiTokens trait來啟用默認身份驗證。

將HasApiTokens trait添加到用戶模型

<?php

namespace AppModels;

use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateNotificationsNotifiable;
use LaravelSanctumHasApiTokens;

class User extends Authenticatable
{
    use Notifiable, HasApiTokens;

    // ...
}

登錄后復(fù)制

為了更好的解釋,我們將使用一個簡單的SPA示例。假設(shè)示例的URL為http://spa.test和通過http://api.spa.test公開的API。

在Laravel中配置CORS

將下面的代碼添加到app/Providers/AppServiceProvider.php文件中來允許跨域資源共享(CORS)。

...
use IlluminateSupportFacadesSchema;
use IlluminateSupportFacadesURL;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Schema::defaultStringLength(191);

        if (config('app.env') === 'production') {
            URL::forceScheme('https');
        }

        $headers = [
            'Access-Control-Allow-Origin' => '*',
            'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, DELETE',
            'Access-Control-Allow-Headers' => 'Origin, Content-Type, Accept, Authorization, X-Request-With',
            'Access-Control-Allow-Credentials' => 'true',
        ];
        $this->app['router']->middleware('api')->get('/sanctum/csrf-cookie', function () {
            return response()->json(['status' => 'success']);
        });

        foreach ($headers as $key => $value) {
            config(['cors.supportsCredentials' => true]);
            config(['cors.paths.api/*' => [
                'allowedOrigins' => ['http://spa.test'],
                'allowedHeaders' => [$key],
                'allowedMethods' => ['*'],
                'exposedHeaders' => [],
                'maxAge' => 86400,
            ]]);
        }
    }
}

登錄后復(fù)制

將上述代碼中的http://spa.test替換為您的SPA的URL。

令牌驗證和API保護說明

在控制器中,我們可以使用Sanctum的auth中間件來保護路由

public function index(Request $request)
{
    $user = $request->user();
    // ...
}

public function store(Request $request)
{
    $user = $request->user();
    // ...
}

public function destroy(Request $request, string $id)
{
    $user = $request->user();  
    // ...
}

public function update(Request $request, string $id)
{
    $user = $request->user();
    // ...
}

登錄后復(fù)制

這會從請求標(biāo)頭中獲取Sanctum授權(quán)令牌,并使用該令牌驗證用戶。如果未在標(biāo)頭中提供授權(quán)令牌,則將返回401未經(jīng)授權(quán)的錯誤。

發(fā)出授權(quán)令牌請求

在我們的SPA中,我們可以使用axios庫來使用API并獲取令牌。要獲取授權(quán)令牌,我們需要首先獲取CSRF令牌,所以我們需要發(fā)送一個GET請求來獲取它。

axios.get('http://api.spa.test/sanctum/csrf-cookie').then(response => {
    axios.post('http://api.spa.test/login', {
        username: this.username,
        password: this.password
    }).then(response => {
        axios.defaults.headers.common['Authorization'] = `Bearer ${response.data.token}`;
        this.$router.push({ name: 'home' });
    });
});

登錄后復(fù)制

上面的代碼將在http://api.spa.test中發(fā)出POST請求,在服務(wù)器上創(chuàng)建一個新的Sanctum授權(quán)令牌,并將令牌作為response.data.token進行響應(yīng)。此后,我們可以將令牌添加到axios的通用頭文件中,以在SPA中使用所有后續(xù)請求。

注意,此示例假設(shè)有一個名為“l(fā)ogin”的路由。

Sanctum還為我們提供了一個logout路由來撤銷授權(quán)令牌。

axios.post('http://api.spa.test/logout').then(response => {
    delete axios.defaults.headers.common['Authorization'];
    this.$router.push({ name: 'login' });
});

登錄后復(fù)制

結(jié)論

Laravel Sanctum是一個輕量級的簡單實用的身份驗證系統(tǒng),它易于集成和使用,并提供默認的身份驗證功能,是SPA身份驗證的絕佳解決方案。一旦您與Sanctum一起使用,您將不再需要編寫自己的身份驗證系統(tǒng)。它能夠讓我們?yōu)槲覀兊腁PI快速實現(xiàn)安全的身份驗證,并讓我們的SPA與API在很短的時間內(nèi)交互。

以上就是Laravel開發(fā):如何使用Laravel Sanctum為SPA提供API身份驗證?的詳細內(nèi)容,更多請關(guān)注www.xfxf.net其它相關(guān)文章!

分享到:
標(biāo)簽:API身份驗證 laravel Sanctum
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定