【问题标题】:Passport Google oauth generates "Network Error" on react.js appPassport Google oauth 在 react.js 应用程序上生成“网络错误”
【发布时间】:2019-07-05 19:46:18
【问题描述】:

我使用Passport 来实现 Google 登录功能。但是,当我从react 客户端应用程序发送axios 请求时,chrome 控制台上会出现一条错误消息。

客户端 - 反应(在端口 3000 上运行):

SignInForm.js组件中的axios请求(当用户点击登录按钮时触发):

googlelogin(){
   axios.get('/api/users/google_auth')
     .then(()=>console.log("success"))
     .catch(err=>console.log(err))
}

控制台上的错误信息:

Error: Network Error
at createError (createError.js:17)
at XMLHttpRequest.handleError (xhr.js:87)

服务器端 - node.js(在端口 5000 上运行):

passport.js 代码:

passport.use(
  new GoogleStrategy({
    clientID: GOOGLE_CLIENT_ID,
    clientSecret: GOOGLE_CLIENT_SECRET,
    callbackURL: '/api/users/google_auth/redirect'  
  },
  (accessToken, refreshToken, profile, done) => {
    console.log("called")
    User.findOne({email: profile.id})
      .then(user => {
        console.log('googleLogin');
        done(null,user);
      })
      .catch(err => {
        done(err,null,{message:'fail'})
      })
  }
  )
);

routes/api/users.js 代码:

router.get('/google_auth',passport.authenticate('google',{
  scope:['profile']
}),()=>{console.log("test")})

router.get('/google_auth/redirect',(req, res)=>{
  res.send("hi")
})

Chrome Devtools 网络点击日志:

我已经在 Youtube、Google、Github 和 StackOverflow 上进行了搜索。我不知道该怎么做才能解决这个问题。

【问题讨论】:

  • 最好为您的 API 添加额外的日志记录,特别是围绕护照身份验证功能。看看这个答案,看看如何从 Passport 中提取错误:stackoverflow.com/questions/15711127/…。这将为您提供更多信息。
  • @tombraider 谢谢。我修改了代码,但服务器控制台没有像以前一样的响应。 passport.authenticate 函数的回调没有被执行..

标签: node.js reactjs express passport.js google-oauth


【解决方案1】:

查看现有的 Passport 示例,您似乎正在尝试在原始 get 请求中使用中间件,这是不正确的。看看这个例子:https://github.com/passport/express-4.x-facebook-example/blob/master/server.js

当然它正在使用 Facebook,但您可以在他们的登录请求中看到他们正在使用 Passport.authenticate 解决请求,而不是使用中间件。

将您的 API 修改为类似以下内容:

router.get('/google_auth', passport.authenticate('google', { scope:['profile'] }));

router.get('/google_auth/redirect', passport.authenticate('google', { failureRedirect: '/login' }), (req, res) => {
  res.send("Logged in.")
});

【讨论】:

  • 感谢您的回复。我已经解决了这个问题!当我使用 axios 请求“/api/users/google_auth”时,它没有重定向到与 Google Oauth 相关的域。当我创建一个带有 href = 'address' 的按钮并请求请求时,它工作正常。我不知道为什么它们的工作方式不同。
猜你喜欢
  • 1970-01-01
  • 2017-03-30
  • 2016-04-29
  • 1970-01-01
  • 2016-07-05
  • 2019-03-02
  • 2019-01-13
  • 2016-10-28
  • 2019-01-30
相关资源
最近更新 更多