📜  laravel sanctum 稳定版 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:43:45.855000             🧑  作者: Mango

Laravel Sanctum 稳定版 - Shell-Bash

简介

Laravel Sanctum是Laravel官方支持的API认证包。它提供了一系列的API认证解决方案,包括Session认证和Token认证。它具有简单的API,易于使用,与Laravel的安全性模型完全集成,并且功能强大。它被广泛用于Laravel应用程序中的API认证。

安装

Sanctum可以通过Composer安装。在终端中运行以下命令:

composer require laravel/sanctum
配置

在应用程序中启用Sanctum,只需要在app/Providers/AuthServiceProvider.php文件中注册Sanctum的中间件即可。在boot()方法中添加以下代码:

use Laravel\Sanctum\HasApiTokens;

...

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

    Sanctum::ignoreMigrations();

    Passport::routes();
    Gate::guessPolicyNamesUsing(function ($modelClass) {
        return 'App\Policies\\' . class_basename($modelClass) . 'Policy';
    });

    Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);

    if ($this->app->runningInConsole()) {
        $this->commands([
            InstallCommand::class,
            ClientCommand::class,
            TokenCommand::class,
            PurgeCommand::class,
        ]);
    }

    //Register the Sanctum middleware
    $this->app['router']->aliasMiddleware('auth.sanctum', EnsureFrontendRequestsAreStateful::class);
}
认证

使用Sanctum进行API认证非常简单。首先,让我们定义一个控制器,然后添加一些基本的路由:

use Illuminate\Http\Request;

class UserApiController extends Controller
{
    public function index(Request $request)
    {
        $user = $request->user();

        // Respond with the authenticated user
        return response()->json(['user' => $user]);
    }
}

Route::middleware('auth:sanctum')->get('/users', [UserApiController::class, 'index']);

我们可以通过http://localhost:8000/users获取API的响应,Sanctum会自动处理API的认证。Sanctum也支持无状态的认证,允许我们在不使用cookie的情况下使用它。

令牌

Sanctum还提供另一种认证形式-基于令牌的认证。允许我们创建令牌并向API请求传递令牌以进行认证。

首先,我们需要为我们的用户模型添加HasApiTokens特征。这个特性为我们的用户模型添加了一个新的方法createToken(),该方法用于创建一个个性化的访问令牌:

use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
}

我们可以通过以下方式创建一个新令牌:

$user = User::find(1);
$token = $user->createToken('token-name');

该方法为当前用户返回一个新的API访问令牌。我们还可以使用token()方法检索已有的令牌:

$token = $user->tokens->first();

我们可以通过使用该令牌进行认证:

$response = $client->get('/api/user', [
    'headers' => [
        'Accept' => 'application/json',
        'Authorization' => 'Bearer '.$accessToken,
    ],
]);

Sanctum还提供了许多其他功能,例如撤销令牌,撤销所有令牌,检索令牌等等。

结论

Laravel Sanctum是一个功能强大且易于使用的Laravel官方支持的API认证包。使用它,我们可以轻松地创建基于令牌和无状态的API认证,并将其与Laravel的安全性模型完全集成。安装和配置Sanctum也很容易,只需几行代码即可。