📅  最后修改于: 2023-12-03 14:43:45.855000             🧑  作者: Mango
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也很容易,只需几行代码即可。