Перенаправление пользователей, если они не используют определенный домен - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь перенаправить пользователей на маршрут с помощью res.redirect или отправить файл с помощью res.send, если они пытаются войти в систему, используя домен, отличный от указанного. Проверка условий работает, но я пытаюсь использовать res.sendFile / res.redirect, но, похоже, она не работает в рамках этой функции. Понятно, что в этой функции нет разрешения, но это все, что я придумал. Был действительно хороший поиск в Интернете, но я еще не решил проблему.

Любая помощь приветствуется.

passport.use(
  new GoogleStrategy({
    callbackURL: '/google/redirect',
    clientID: keys.google.clientID,
    clientSecret: keys.google.clientSecret
}, function (accessToken, refreshToken, profile, done){
  if (profile._json.hd === "HIDDEN-DOMAIN.COM") {
    User.findOne({googleId : profile.id})
  .then(function(currentUser){
    if(currentUser){
      console.log('User with ID' + currentUser.googleId +' already exists. No new entry was made');
      done(null, currentUser);
    } else {
      new User({
        username: profile.displayName,
        googleId: profile.id
      })
      .save()
      .then(function(newUser){
        console.log('New user created: ' + newUser);
        done(null, newUser);
      });
    }
  })
} else {
  console.log(__dirname);
  res.sendFile('../login.html');
};
}));

1 Ответ

0 голосов
/ 26 марта 2019

Используйте промежуточное ПО для выполнения проверки и next(), если она прошла. Оформить заказ: https://expressjs.com/en/guide/using-middleware.html

В этом примере показана функция промежуточного программного обеспечения, смонтированная в / path. Функция выполняется для любого типа HTTP-запроса в / path.

В этом примере показан маршрут и функция его обработчика (система промежуточного программного обеспечения). Функция обрабатывает запросы GET.

app.use('/', function (req, res, next) {
  // Check 1
  console.log('Request URL:', req.originalUrl)
  next()
}, function (req, res, next) {
  // Check 2: Pass first check
  console.log('Request Type:', req.method)
  next()
})
app.get('/', (req, res) => {
   // Final Route
});

Пример:

app.use('/first', function (req, res, next) {
    passport.use(
        new GoogleStrategy({
            callbackURL: '/google/redirect',
            clientID: keys.google.clientID,
            clientSecret: keys.google.clientSecret
        }, function (accessToken, refreshToken, profile, done){
            if (profile._json.hd === "HIDDEN-DOMAIN.COM") {
                User.findOne({googleId : profile.id})
                    .then(function(currentUser){
                        if(currentUser){
                            console.log('User with ID' + currentUser.googleId +' already exists. No new entry was made');
                            done(null, currentUser);
                        } else {
                            new User({
                                username: profile.displayName,
                                googleId: profile.id
                            })
                                .save()
                                .then(function(newUser){
                                    console.log('New user created: ' + newUser);
                                    done(null, newUser);
                                    next(); // next();
                                });
                        }
                    })
            } else {
                console.log(__dirname);
                next(); // next();
            }
        }));

}, function (req, res, next) {
    // More checks
    next()
});

app('/', (req, res) => {
    // final route here
    res.sendFile('../login.html');
})
...