Паспорт Google oauth генерирует «Ошибка сети» в приложении activ.js - PullRequest
0 голосов
/ 12 февраля 2019

Я использую Passport для реализации функции входа в Google.Однако когда я отправляю запрос axios из клиентского приложения react, на консоли Chrome появляется сообщение об ошибке.

Сторона клиента - реакция (работает на порте 3000):

Запрос Axios в компоненте SignInForm.js (запускается, когда пользователь нажимает кнопку входа в систему):

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'})
      })
  }
  )
);

routs / 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:

enter image description here

Я уже искал на Youtube, Google, Github и StackOverflow.Я не знаю, что делать, чтобы решить эту проблему.

1 Ответ

0 голосов
/ 12 февраля 2019

Глядя на существующие примеры 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.")
});
...