Laravel sanctum 获得合适的用户
Laravel sanctum getting the right user
我正在尝试使用 Laravel 和 Sanctum 为现有系统构建一个 API,该系统具有我无法修改的数据库,但我在身份验证方面遇到了问题。
系统有一个不太常见的用户table,其中一个用户可以有相同的id但有3个不同的'types'。因此,在登录时,我会发送电子邮件、密码和类型。没问题,成功登录。
但是当试图恢复 logged-in 用户时,它显示错误的用户。示例:
Login:
(this user has id 8)
email: dummy@gmail.com
password: xxxxx
type: 2
Recovered user:
(this user also has id 8)
email: dummy@gmail.com
passsword: xxxxx
type: 1
我觉得是因为他们ID相同,Laravel拿了第一个用户,不一定正确
我被这个问题困住了...我该怎么办?有没有办法获得合适的用户?
谢谢
登录功能
public function login(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email',
'password' => 'required',
'tip_id' => 'required|int'
]);
if (!Auth::attempt($validator->validated())) {
return response()->json(['error' => 'Email e/ou senha incorretos'], 400);
} else {
$user = User::where('email', $request->input('email'))->where('tip_id', $request->input('tip_id'))->first();
$item = time().rand(0, 9999);
$token = $user->createToken($item)->plainTextToken;
return response()->json(['token' => $token]);
}
}
用户档案功能
public function profile()
{
return response()->json(['user' => auth()->user()]);
}
我在 Reddit 上问过同样的问题,我得出了预期的结论,即如果不更改数据库就无法解决此问题
我知道你一定已经解决了这个问题,但我想分享我实现这个问题的方法,以便其他人可以获得帮助。
我将在新数据库中创建单独的 table 来管理具有至少 3 列 ID 的 sanctum 用户,user_id,如果现有数据库不是 writable 然后在验证用户之后输入,我将为新 table 的 id 列创建令牌。
我正在尝试使用 Laravel 和 Sanctum 为现有系统构建一个 API,该系统具有我无法修改的数据库,但我在身份验证方面遇到了问题。
系统有一个不太常见的用户table,其中一个用户可以有相同的id但有3个不同的'types'。因此,在登录时,我会发送电子邮件、密码和类型。没问题,成功登录。
但是当试图恢复 logged-in 用户时,它显示错误的用户。示例:
Login:
(this user has id 8)
email: dummy@gmail.com
password: xxxxx
type: 2
Recovered user:
(this user also has id 8)
email: dummy@gmail.com
passsword: xxxxx
type: 1
我觉得是因为他们ID相同,Laravel拿了第一个用户,不一定正确
我被这个问题困住了...我该怎么办?有没有办法获得合适的用户? 谢谢
登录功能
public function login(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email',
'password' => 'required',
'tip_id' => 'required|int'
]);
if (!Auth::attempt($validator->validated())) {
return response()->json(['error' => 'Email e/ou senha incorretos'], 400);
} else {
$user = User::where('email', $request->input('email'))->where('tip_id', $request->input('tip_id'))->first();
$item = time().rand(0, 9999);
$token = $user->createToken($item)->plainTextToken;
return response()->json(['token' => $token]);
}
}
用户档案功能
public function profile()
{
return response()->json(['user' => auth()->user()]);
}
我在 Reddit 上问过同样的问题,我得出了预期的结论,即如果不更改数据库就无法解决此问题
我知道你一定已经解决了这个问题,但我想分享我实现这个问题的方法,以便其他人可以获得帮助。
我将在新数据库中创建单独的 table 来管理具有至少 3 列 ID 的 sanctum 用户,user_id,如果现有数据库不是 writable 然后在验证用户之后输入,我将为新 table 的 id 列创建令牌。