You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:39:12