Laravel 护照签发后获得用户Access Token

Laravel Passport get user Access Token after being issued

我正在使用 Laravel Passport 在用户登录后向其发送 Bearers,然后能够连接到 API(是的,我知道 Sanctum 可能更合适我的需求,但我正在使用 Passport,所以更不用说切换到 Sanctum),然后在 Front-end 上,我将用户电子邮件和 Bearer 存储在 cookie 中,以便稍后使用它们其他查询并将承载添加到 Axios Auth header 虽然现在我的逻辑有问题,可能与我不知道如何在 Nuxt 中正确使用 Passport 有关。

我在 post 请求中向用户发送电子邮件的每个页面都有查询,他们 return 返回全局信息和用户信息的组合。

是的,我的端点已经在 auth 中间件后面,但我只是发送一个 Bearer Token 以允许使用任何数据查询端点,没有阻止从用户 A 请求用户 B 信息。

如何防止用户发送不同的电子邮件并获取其他用户的信息?

这是我发布访问令牌的方式:

$token    = $user->createToken('Laravel Password Grant Client')->accessToken;

有这样的方法吗?

$user = User::where('email', $request->email)->first();
// E.g. user@mail.com  ...

// Get the user Access Token
$userToken    = $user->getAccessToken;
// E.g. someBerareText

// check if the User Access Token match with the one send in the request
// if they don't match throw a 401
if ($userToken !== $request->header('Authorization')) {
   return response()->json([ "error" => "Not Authorized" ], 401);
...

// E.g. $request->header('Authorization') it's SomeOtherBearer because he
// requested info for user@mail.com but the $request->header('Authorization')
// belong to otheruser@othermail.com

用户仍然可以发送相同的请求,但使用用户 B 的电子邮件并查看不属于他的其他信息,那么我如何检查 $request 中的电子邮件是否属于用户 B实际登录了吗?

一些方法来解码访问令牌并检查它是否真的属于用户?

如果Laravel Passport设置为守卫,它会从bearer token中获取用户,逻辑可以在Passport中的TokenGuard.php class中看到。它实际上与您想要实现的相同。

因此,与使用的守卫相比,身份验证的工作方式不同。因此 Passport 要求您换岗。这是 Laravel 如何区分身份验证以及如何加载 Auth::user() 的决定性因素。

'guards' => [
    ...

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

这意味着您可以使用比较模型是否相同的模型函数 is() 检查用户是否通过了正确的身份验证。

User::where('email', $request->email)->first()->is(Auth::user())