首页 > 解决方案 > 无法使用远程服务器进行本地身份验证

问题描述

概括:

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

详细地:

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

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

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

query{
  isAuthenticated
}

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

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

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

一些相关文件:

标签: node.jsreactjscorspassport.jsapollo

解决方案


@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',
  },
];


推荐阅读