Node.js CORS与googleoauth
我试图在我的应用程序中实现谷歌登录,但遇到了一个令人沮丧的问题。 我的react应用程序在端口3000上运行,我的express服务器在端口5000上。我还使用passport对用户进行身份验证。 当我试图通过谷歌登录时,我点击了下面的路径,我得到了错误Node.js CORS与googleoauth,node.js,reactjs,express,cors,Node.js,Reactjs,Express,Cors,我试图在我的应用程序中实现谷歌登录,但遇到了一个令人沮丧的问题。 我的react应用程序在端口3000上运行,我的express服务器在端口5000上。我还使用passport对用户进行身份验证。 当我试图通过谷歌登录时,我点击了下面的路径,我得到了错误 请求的资源上不存在“Access Control Allow Origin”头。起源'http://localhost:3000因此,不允许访问。 从我读到的内容来看,我必须在express服务器上设置CORS(我使用CORS库进行了设置)。即
请求的资源上不存在“Access Control Allow Origin”头。起源'http://localhost:3000因此,不允许访问。
从我读到的内容来看,我必须在express服务器上设置CORS(我使用CORS库进行了设置)。即使这样做,我仍然得到这个错误。
下面是代码:
护照:
module.exports = passport => {
passport.use(
new GoogleStrategy(
{
clientID: keys.googleClient,
clientSecret: keys.googleSecret,
callbackURL: "/auth/google/callback"
},
(token, refreshToken, profile, done) => {
return done(null, {
profile: profile,
token: token
});
}
)
);
路线:
router.post(
"/auth/google",
passport.authenticate("google", {
session: false,
scope: ["profile"]
}),
(req, res) => {
if (!req.token) {
return res
.status(401)
.json("Not authorized");
} else {
console.log(req.token);
}
}
);
为了启用CORS,我所做的只是包括CORS库并将其与express一起使用:
//enables cors
app.use(cors());
也许我误解了整个CORS的事情。如何处理此问题?浏览器错误消息提示要设置的正确原点:
请求的资源上不存在“Access Control Allow Origin”标头。起源'http://localhost:3000因此,不允许访问。
根据:
应用程序使用(cors({来源:http://localhost:3000" }))
您正在从localhost:3000向localhost:5000发出请求,因为它们的来源不同,所以对于安全浏览器,不会发出此请求。要规避,您必须使用代理
既然你们并没有提到这个网页,我相信你们正在使用CRA(CreateReact应用程序)。这就是在CRA中设置代理的方式
在客户端目录中:
npm i http-proxy-middleware --save
在client/src中创建setupProxy.js文件。无需在任何地方导入此文件。create react应用程序将查找此目录
将代理添加到此文件
const proxy=require("http-proxy-middleware")
module.exports=function(app){
app.use(proxy(['/auth/google'],{target:"http://localhost:8888"}))}
我们的意思是,如果有人试图访问react服务器上的route/auth/google,请自动将请求转发到localhost:5000。可能会帮助您从浏览器发送请求,标题为
Access Control Allow Origin
:“*”
。