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())
我正在使用 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())