无法使用远程服务器进行本地身份验证

Posted

技术标签:

【中文标题】无法使用远程服务器进行本地身份验证【英文标题】:Cannot authenticate locally with remote server 【发布时间】:2020-11-08 09:26:56 【问题描述】:

总结:

当我尝试运行连接到正在运行的服务器的前端 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',
));

一些相关文件:

front-end index.tsx front-end app.tsx back-end index.tsx

【问题讨论】:

【参考方案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;
);

【讨论】:

以上是关于无法使用远程服务器进行本地身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab - 无法对 CI 和 CD 构建的远程服务器进行身份验证

远程连接Windows云服务器报错:出现身份验证错误,要求的函数不受支持

windows 2008 R2 出现身份验证错误。 无法连接到本地安全机构

scp从别人电脑拷贝到本地会被发现吗

Laravel:无法使用 2 个可能的身份验证器在 SMTP 服务器上使用用户名进行身份验证

远程桌面连接win7 无法验证此远程计算机的身份 由于安全证书存在问题,因此远程计算机无法通过身份验证