Нужна помощь в отладке моего веб-приложения в nodejs - PullRequest
0 голосов
/ 10 мая 2018

Я использую Google Outh2 в nodejs с помощью passport.js, разрабатывая стратегию Google. Но проблемы возникают здесь, когда я использую console.log в любом месте кода в любом файле, независимо от того, находится ли он в каталоге веб-приложения и работает. Но когда я использую свой console.log в этой функции, ничего не выполняется, я не могу ни извлечь пользовательские данные, ни выполнить console.log, чтобы просто отобразить сообщение в консоли, когда выполняется внутри этого кода

(accessToken, refreshToken, profile, done) => {
console.log('data');
})

Полный код здесь: Файл: passport-setup.js

var passport = require('passport');
var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
passport.use(new GoogleStrategy({
    clientID: "",
    clientSecret: "",
    callbackURL: "http://127.0.0.1:3000/auth/google/redirect"
  },
  function(accessToken, refreshToken, profile, done) {

  console.log('logineed');
  }
));

Маршрут: index.js

var express = require('express');
var passport = require('passport');
var router = express.Router();

router.get('/login', function(req, res, next) {
  res.render('index', { title: 'Login' });
});
router.get('/google',passport.authenticate('google', { scope: ['profile'] }));

router.get('/google/redirect',  function(req,res){
    res.redirect('/app');
});
router.get('/app',function(req,res){
  res.send('Your are in');
});
module.exports = router;

Точка входа: app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var passportConfig = require('./config/passport-setup');
var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/auth', indexRouter);
app.use('/app', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Проблема была с кодом

router.get('/google/redirect',  function(req,res){
    res.redirect('/app');
});

в файле router.js

Это должно быть написано как

router.get('/google/redirect', passport.authenticate('google'),  function(req,res){
    res.redirect('/app');
});

Поскольку то, что происходит во время входа в систему, до того, как произойдет перенаправление ссылки, доступны данные Google этого человека. Но после перенаправления все данные доступа к данным учетной записи Google теряется. Чтобы получить к нему доступ, мы вызовем функцию проверки подлинности паспорта со стратегией Google, которая будет загружать данные пользователя Google. Как указано в коде выше

0 голосов
/ 10 мая 2018

Похоже, вы не инициализируете паспорт в качестве промежуточного программного обеспечения для Express.

Попробуйте добавить это в app.js

app.use(passport.initialize());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...