【问题标题】:Cannot authenticate locally with remote server无法使用远程服务器进行本地身份验证
【发布时间】:2026-02-02 11:10:01
【问题描述】:

总结:

当我尝试运行连接到正在运行的服务器的前端 React 应用程序,然后尝试登录时,我的 isAuthenticated 查询在应该返回 true 时返回 false。

详细说明:

我有一个部署的 Node Apollo 服务器(通过 heroku),它使用 graphql、express 和 passport 进行身份验证。可以找到服务器here(可能需要一分钟才能启动)并使用this code。当我去这个服务器时,我可以通过运行以下突变登录:

mutation{
  loginUser(data:{email: "john@gmail.com", password: "abc"}){
    id
    email
    firstName
    lastName
  }
}

然后我运行以下查询,并返回true

query{
  isAuthenticated
}

我想在我的前端应用程序上执行同样的操作。可以找到此代码here。只需转到此存储库,克隆它,然后运行 ​​yarnyarn start 即可运行应用程序。但是,如果您打开控制台,然后单击“登录”按钮,然后单击“isAuthenticated”按钮,您将看到“isAuthenticated”返回为 false,而不是 true。

我在配置 express 及其 cors 选项或如何在前端设置 http 链接时做错了吗?我为 localhost:8080 启用了 cors,所以我不确定为什么会看到这种效果。

expressMiddleware.use(cors({
  credentials: true,
  origin: 'http://localhost:8080',
}));

一些相关文件:

【问题讨论】:

    标签: node.js reactjs cors passport.js apollo


    【解决方案1】:

    @jimmy - 我尝试了本地设置,似乎一切正常。

    这是isAuthenticated: true 的快照。

    我更改了迷你服务器的用户名和密码以匹配迷你应用的用户名和密码。

    小程序

    const handleLogin = async (): Promise<void> => {
        await loginUser({
          variables: {
            email: 'dad@gmail.com',
            password: 'temp-password',
          },
        });
      };
    

    迷你服务器 - src/users.ts

    export default [
      {
        id: '1',
        firstName: 'John',
        lastName: 'Smith',
        email: 'dad@gmail.com',
        password: 'temp-password',
      },
    ];
    
    

    【讨论】:

      【解决方案2】:

      之前我遇到了同样的错误,但后来我在后端检查了电子邮件和密码是否未定义,然后它起作用了...... 例如:

      app.get("/index",(req,res)=>{
          if(req.query.username!=undefined && req.query.password!=undefined){
              var filterObject = {
                  username: req.query.username,
                  password:req.query.password
              };
              var promiseddata=todolists.collection('usercredentials100').find({username:req.query.username,password:req.query.password}).toArray();
              promiseddata.then(users=>{
                  var array=users;
                  if(array.length==1){
                      var abc="true";
                      var responsestring=JSON.stringify(abc);
                      res.status(200).send(responsestring);
                  }
                  else if(array.length==0){
                      var abc="false";
                      var responsestring=JSON.stringify(abc);
                      res.status(200).send(responsestring);
                  }
              });
          }
          global.user=req.query.username;
      });
      

      【讨论】:

        最近更新 更多