Symfony3.4+VueJS无法获取登录用户数据问题求助
解决VueJS获取登录用户数据返回空对象的问题
首先看你代码里的getUser()方法,这里有个明显的错误:$this->container->get('security.token_storage')->getToken()->getUser('id'),getUser()方法不需要传入参数,它直接返回当前登录的用户实体对象,而不是返回用户ID。你这么写会导致$userId的值异常,自然查不到用户,最终返回空对象。
第一步:修正后端获取用户的代码
把你的getUser()方法改成这样:
public function getUser() { $token = $this->container->get('security.token_storage')->getToken(); // 先判断token是否存在,以及用户是否已登录 if (!$token || !is_object($token->getUser())) { // 可根据业务需求返回null,或抛出401未授权异常 return null; } $user = $token->getUser(); // 直接返回用户实体,后续交给JMS Serializer处理序列化即可 return $user; // 若你执意要通过repository查询(其实没必要,getUser已返回实体),可这么写: // return $this->repository->findOneBy(['id' => $user->getId()]); }
第二步:检查JMS Serializer的配置
确保你的User实体上的JMS注解配置正确,没有误排除必要字段。示例如下:
use JMS\Serializer\Annotation as Serializer; /** * @Serializer\ExclusionPolicy("ALL") */ class User extends BaseUser { /** * @Serializer\Expose() * @Serializer\Type("integer") */ protected $id; /** * @Serializer\Expose() * @Serializer\Type("string") */ protected $username; // 其他需要返回的字段,都要加上@Serializer\Expose()注解 }
如果使用了序列化组,还要确保FOS Rest控制器方法指定了正确的分组,比如:
/** * @Rest\Get("/api/current-user") * @Rest\View(serializerGroups={"user"}) */ public function getUserAction() { return $this->getUser(); }
同时实体字段要对应加上@Serializer\Groups({"user"})注解。
第三步:检查Vue端的请求是否携带认证信息
如果后端基于session认证,要确保Vue请求带上了session cookie(跨域场景需配置withCredentials: true);如果是JWT认证,要在请求头里添加Authorization: Bearer {token}。若请求未携带认证信息,后端security.token_storage无法获取用户,自然返回空对象。
第四步:调试后端响应
可以先在浏览器或Postman中直接调用API接口,查看返回的JSON是否为正确的用户数据。如果后端返回为空,问题出在后端;如果后端返回正确数据但Vue中console.log为空,要检查Vue的请求处理逻辑——比如是不是异步请求未完成就打印了,或者响应解析存在问题。
内容的提问来源于stack exchange,提问作者Piczak
相关产品推荐
相关产品推荐

