GA黄金甲

Laravel开发:怎样使用Laravel Sanctum为SPA提供API身份验证?

laravel开发:怎样使用laravel sanctum为spa提供api身份验证?

随着单页应用程序(SPA)的盛行,我们需要一种可靠的要领来;A黄金甲API免受未经授权的会见和攻击 。Laravel Sanctum是Laravel提供的一个轻量级的认证系统,它为SPA提供轻松的身份验证 。本文将向您展示怎样使用Laravel Sanctum为SPA提供API身份验证 。

使用Laravel Sanctum

Laravel Sanctum是Laravel 7.x版本中的一个官方包,用于API身份验证 。Laravel Sanctum使用该API的Token来识别用户身份,并且可以通过使用token轻松执行多个身份验证的构建 。

装置Laravel Sanctum

首先,需确保已装置Laravel框架 。

要装置laravel sanctum,可以使用以下下令

composer require laravel/sanctum

登录后复制

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

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

],

登录后复制

现在,可以运行以下下令宣布须要的数据库迁徙和Sanctum设置 。

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

登录后复制

执行以下下令以运行迁徙:

php artisan migrate

登录后复制

使用Sanctum举行默认身份验证

Sanctum包括API和单页应用程序身份验证的默认实现 ?梢酝ü没W邮褂肧anctumTraitsHasApiTokens trait来启用默认身份验证 。

将HasApiTokens trait添加到用户模子

<?php

namespace AppModels;

use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateNotificationsNotifiable;
use LaravelSanctumHasApiTokens;

class User extends Authenticatable
{
    use Notifiable, HasApiTokens;

    // ...
}

登录后复制

为了更好的诠释,我们将使用一个简朴的SPA示例 。假设示例的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,
            ]]);
        }
    }
}

登录后复制

将上述代码中的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();
    // ...
}

登录后复制

这会从请求标头中获取Sanctum授权令牌,并使用该令牌验证用户 。若是未在标头中提供授权令牌,则将返回401未经授权的过失 。

发出授权令牌请求

在GA黄金甲SPA中,我们可以使用axios库来使用API并获取令牌 。要获取授权令牌,我们需要首先获取CSRF令牌,以是我们需要发送一个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' });
    });
});

登录后复制

上面的代码将在http://api.spa.test中发出POST请求,在效劳器上建设一个新的Sanctum授权令牌,并将令牌作为response.data.token举行响应 。以后,我们可以将令牌添加到axios的通用头文件中,以在SPA中使用所有后续请求 。

注重,此示例假设有一个名为“login”的路由 。

Sanctum还为我们提供了一个logout路由来作废授权令牌 。

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

登录后复制

结论

Laravel Sanctum是一个轻量级的简质朴用的身份验证系统,它易于集成和使用,并提供默认的身份验证功效,是SPA身份验证的绝佳解决计划 。一旦您与Sanctum一起使用,您将不再需要编写自己的身份验证系统 。它能够让我们为GA黄金甲API快速实现清静的身份验证,并让GA黄金甲SPA与API在很短的时间内交互 。

以上就是Laravel开发:怎样使用Laravel Sanctum为SPA提供API身份验证?的详细内容,更多请关注本网内其它相关文章!

免责说明:以上展示内容泉源于相助媒体、企业机构、网友提供或网络网络整理,版权争议与本站无关,文章涉及看法与看法不代表GA黄金甲滤油机网官方态度,请读者仅做参考 。本文接待转载,转载请说明来由 。若您以为本文侵占了您的版权信息,或您发明该内容有任何涉及有违公德、冒犯执法等违法信息,请您连忙联系GA黄金甲实时修正或删除 。

相关新闻

联系GA黄金甲

18523999891

可微信在线咨询

事情时间:周一至周五,9:30-18:30,节沐日休息

QR code
【网站地图】【sitemap】