Возникли проблемы с паспортом JS - PullRequest
0 голосов
/ 08 июля 2019

Я новичок в узле js и пытаюсь создать пример для авторизации с google passport ниже мой код:

index.js

const express = require('express');
const app = express();
var passport = require('passport');
var GoogleStrategy = require('passport-google-oauth20').Strategy;

passport.use(new GoogleStrategy({
      clientID        : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
      clientSecret    : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
      callbackURL     : "http://localhost/google/login",
      passReqToCallback   : true
  },
  function(accessToken, refreshToken, profile, done) {
    return done(); //this is the issue, I am confused with it's use
  }
));

app.get('/failed', function (req, res) {
  res.send('failed login')
});

app.get('/final', function (req, res) {
  res.send('finally google auth has done')
});

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

app.get('/google/login',
  passport.authenticate('google', { failureRedirect: '/failed' }),
  function(req, res) {
    // Successful authentication, redirect home.
    res.redirect('/final');
  });

app.listen('80', () => {
  console.log('server is running')
})

Наконец, моя цель - успешный вход в систему с помощью Google без проверки значения из БД, поскольку я только изучаю его.

узел index.js

и затем я открываю URL: http://localhost/auth/google

моя программа должна запускаться get /final после входа в систему с учетными данными Google, но с ошибкой TypeError: done is not a function

Я не пользуюсь done() и как я могу ее решить.

1 Ответ

1 голос
/ 09 июля 2019

Когда вы используете passReqToCallback : true, вам нужно изменить аргументы функции обратного вызова. req тоже нужно передать в качестве первого аргумента функции обратного вызова.

Ваш аргумент функции обратного вызова должен быть (req, accessToken, refreshToken, profile, done)

И вот почему вы получаете ошибку:

сделано не является функцией

Попробуйте это:

passport.use(new GoogleStrategy({
      clientID        : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
      clientSecret    : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
      callbackURL     : "http://localhost/google/login",
      passReqToCallback   : true
  },
  function(req, accessToken, refreshToken, profile, done) {
    return done(); // it will work now
  }
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...