有没有办法在不同的域上拥有圣所

meh*_*ran 4 cookies laravel single-page-application laravel-sanctum

我在域 A 上有 spa,在域 BI 上有一个 Laravel 服务器,想使用 sainttum,但 cookie 只在同一个域中工作,所以你建议有什么办法解决这个问题吗?我不想在 sainttum 上使用基于令牌的 AUTH

Bal*_*aji 6

是的,您可以使用授权代替 cookie

Laravel Sanctum 通过将用户 API 令牌存储在单个数据库表中并通过应包含有效 API 令牌的授权标头对传入的 HTTP 请求进行身份验证来提供此功能。

但这对于 cookie 来说是不可能的,并且不可扩展,因为会话存储在单个服务器中。如果您使用多个服务器。

例子 :

如果您在服务器 1 中存储会话,当您使用相同的 cookie 时,我会选择服务器 1 和服务器 2,而服务器 2 中的会话不知道服务器 2 意味着您是无效用户。

所以我的建议是使用 JWT 或 sainttum token 而不是 cookie。只需使用

  $user->createToken($request->device_name)->plainTextToken;
Run Code Online (Sandbox Code Playgroud)

上面的代码生成令牌并存储在数据库中,您只需将相同的令牌发送到客户端进行验证即可。

要验证只需使用

Authorization: Bearer <token>
Run Code Online (Sandbox Code Playgroud)

你的路由守卫会自动检查令牌

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    
});
Run Code Online (Sandbox Code Playgroud)


Rep*_*pox 5

不,没有办法绕过使用跨站点 cookie。这是一项安全功能。您必须实施自己的身份验证或使用相同的 TLD。