【发布时间】:2021-06-12 03:53:23
【问题描述】:
我正在使用 Laravel Passport 在用户登录后向用户发出 Bearers,然后能够连接到 API(是的,我知道 Sanctum 可能更适合我的需求,但我使用的是 Passport,所以甚至不要提及切换到 Sanctum),然后在前端,我将用户电子邮件和 Bearer 存储在 cookie 中,以便稍后将它们用于其他查询并将承载添加到 Axios Auth 标头,尽管现在我的逻辑有问题,可能与我不知道如何在 Nuxt 中正确使用 Passport 有关。
对于我在发布请求中向用户发送电子邮件的每个页面都有查询,它们会返回全局信息和用户信息的组合。
是的,我的端点已经在一个身份验证中间件后面,但我只是发送了一个承载令牌以允许使用任何数据查询端点,没有阻止向用户 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 中的电子邮件是否属于实际登录的用户?
某种方式来解码访问令牌并检查它是否真的属于用户?
【问题讨论】:
-
但是您从 auth::user 获取的用户将始终属于令牌,这个用例是什么?或尝试进一步描述问题,为什么需要这样做?
-
正如我之前提到的,前端的每个页面都向用户发送电子邮件以获取混合或用户信息和页面相关的信息,但这意味着如果用户 A 发送对同一页面的请求但对于用户 B 的电子邮件,它将有用户 B 的信息,这就是问题所在。我的中间件检查请求是否包含授权承载,但这并不妨碍向其他用户询问信息。思路是获取用户的 Bearer,获取用户的信息并检查是否与请求中发送的邮件匹配
-
但随后 User::where('email', $request->email)->first()->is(Auth::user()) 不起作用检查您针对用户的请求电子邮件认证? Auth::user 正如你所描述的那样加载得非常好,它发生在警卫中,所以当你需要它时不容易调用。
-
我只是在代码中添加了一个示例以使其更清晰
-
也是 FE 它与 BE 完全分离,Laravel 仅充当 API,而 FE 它在 Nuxt 中的不同容器中
标签: php laravel laravel-passport