php - JWT 从 Laravel 中的令牌中检索经过身份验证的用户
问题描述
当我在请求标头中传递用户的 jwt 令牌时,我只获得该表中的用户信息
我有一个关系数据库,其中每个用户都将数据存储在另一个表中。JWT 仅返回用户表中的用户详细信息(姓名、电子邮件等)。
在获取所有用户的列表时,我可以将他们的数据存储在另一个表中,但我不知道如何使用 jwt。
任何人都可以指导我吗?我正在使用 Laravel
这是用户资源
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
use App\History;
use App\Http\Resources\History as HistoryResource;
class Admin extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'history' => HistoryResource::collection($this->history)
];
}
}
这是用于获取用户的 jwt 控制器
public function getAuthenticatedUser()
{
try {
if (! $user = JWTAuth::parseToken()->authenticate()) {
return response()->json(['user_not_found'], 404);
}
} catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
return response()->json(['token_expired'], $e->getStatusCode());
} catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
return response()->json(['token_invalid'], $e->getStatusCode());
} catch (Tymon\JWTAuth\Exceptions\JWTException $e) {
return response()->json(['token_absent'], $e->getStatusCode());
}
// the token is valid and we have found the user via the sub claim
return response()->json(compact('user'));
}
解决方案
您的问题是JWTAuth::parseToken()->authenticate()
返回 aUser
而不是 User Resource ( Admin
)。
您只需要从$user
要修复的资源中生成资源:
$admin = new Admin($user);
return response()->json(['user' => $admin]);
推荐阅读
- python - 将烧瓶应用程序数据传递给其他 python 脚本
- azure - 为服务主体授予管理员同意
- javascript - 我不能在 javascipt 中使用这个正则表达式来拆分 '(' 的字符
- typescript - TypeScript:不确定我是否正确输入了这个返回承诺的函数
- c - 如何从C中的数组中删除重复元素
- r - 带有 .csv 文件的 ggplot2 中的条形图
- sql - 将 Sql 转换为 MonogoDb
- python - 为什么 Tkinter getvar() 返回 Booleanvar 的字符串类型?
- php - 如何将数据批量插入具有相同数据字段名称的 MySQL 数据库表中?
- html - HTML 中 `main` 元素的替代品有哪些?