无法使用远程服务器在本地进行身份验证
Cannot authenticate locally with remote server
总结:
当我尝试 运行 我的前端反应应用程序连接到我的 运行ning 服务器,然后尝试登录时,我的 isAuthenticated
查询返回 false应该返回 true。
详细信息:
我有一个部署的 Node Apollo 服务器(通过 heroku),它使用 graphql、express 和 passport 进行身份验证。可以找到服务器here(might take a minute to spin up) and uses this code。当我去这个服务器时,我可以通过 运行 宁以下突变登录:
mutation{
loginUser(data:{email: "john@gmail.com", password: "abc"}){
id
email
firstName
lastName
}
}
然后我 运行 以下查询,并返回 true
:
query{
isAuthenticated
}
我想在我的前端应用程序上执行同样的操作。可以找到此代码 here。只需转到此存储库,克隆它,然后 运行 yarn
然后 yarn start
即可获取应用程序 运行ning。但是,如果您打开控制台,然后单击 'login' 按钮,然后单击 'isAuthenticated' 按钮,您将看到 'isAuthenticated' returns 为 false,而不是 true。
我是不是在配置 express 及其 cors 选项或在前端设置 http link 方面做错了什么?我已经为 localhost:8080
启用了 cors,所以我不确定为什么会看到这种效果。
expressMiddleware.use(cors({
credentials: true,
origin: 'http://localhost:8080',
}));
一些相关文件:
之前我遇到了同样的错误,但后来我在后端检查了电子邮件和密码是否未定义,然后就成功了...
例如:
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;
});
@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',
},
];
总结:
当我尝试 运行 我的前端反应应用程序连接到我的 运行ning 服务器,然后尝试登录时,我的 isAuthenticated
查询返回 false应该返回 true。
详细信息:
我有一个部署的 Node Apollo 服务器(通过 heroku),它使用 graphql、express 和 passport 进行身份验证。可以找到服务器here(might take a minute to spin up) and uses this code。当我去这个服务器时,我可以通过 运行 宁以下突变登录:
mutation{
loginUser(data:{email: "john@gmail.com", password: "abc"}){
id
email
firstName
lastName
}
}
然后我 运行 以下查询,并返回 true
:
query{
isAuthenticated
}
我想在我的前端应用程序上执行同样的操作。可以找到此代码 here。只需转到此存储库,克隆它,然后 运行 yarn
然后 yarn start
即可获取应用程序 运行ning。但是,如果您打开控制台,然后单击 'login' 按钮,然后单击 'isAuthenticated' 按钮,您将看到 'isAuthenticated' returns 为 false,而不是 true。
我是不是在配置 express 及其 cors 选项或在前端设置 http link 方面做错了什么?我已经为 localhost:8080
启用了 cors,所以我不确定为什么会看到这种效果。
expressMiddleware.use(cors({
credentials: true,
origin: 'http://localhost:8080',
}));
一些相关文件:
之前我遇到了同样的错误,但后来我在后端检查了电子邮件和密码是否未定义,然后就成功了... 例如:
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;
});
@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',
},
];