Получить поддомен внутри паспорта FacebookTokenStrategy и GoogleStrategy - PullRequest
0 голосов
/ 21 сентября 2018

Я создаю приложение node.js с подстановочными поддоменами.Каждый поддомен будет отдельной частью приложения, которая будет иметь отдельную аутентификацию для пользователей на основе поддоменов.

Например, допустим, у моего приложения будут субдомены abc.domain.com и xyz.domain.com и нижеуказанные пользователи

User1@gmail.com signs up for abc.domain.com
User2@yahoo.com signs up for xyz.domain.com 
User3@msn.com signs up for both abc.domain.com and xyz.domain.com

Каждый пользователь должен иметь доступ только к поддомену, на который он подписан.Так что User1@gmail.com должен иметь возможность войти на abc.domain.com , но должен быть отклонен на xyz.domain.com

Обычно я получаю поддомен с помощью req.get ('host'), а затем извлекаю поддомен оттуда, но, насколько я знаю, passport.js не имеет параметра req.Можно ли как-нибудь получить имя субдомена текущего сайта, в который пытается войти пользователь?Ниже приведен код паспорта-фейсбук-токена, скопированный с https://github.com/drudge/passport-facebook-token

var FacebookTokenStrategy = require('passport-facebook-token');

passport.use(new FacebookTokenStrategy({
        clientID: FACEBOOK_APP_ID,
        clientSecret: FACEBOOK_APP_SECRET
    }, function(accessToken, refreshToken, profile, done) {
        // SQL statement will go here that will check whether a user is signed up for the subdomain they are logging into. It will also check if the user exists in the database
    });
  }
));

1 Ответ

0 голосов
/ 21 сентября 2018

Я нашел решение, поэтому отвечаю на свой вопрос, если кому-то понадобится узнать, как отобразить req в любой стратегии, используя passport.js. Все, что вам нужно сделать, это установить для passReqToCallBack значение true.

Ниже обновленный код

passport.use(new FacebookTokenStrategy({
        clientID: FACEBOOK_APP_ID,
        clientSecret: FACEBOOK_APP_SECRET,
        passReqToCallback: true   // Added for req to show in callback
    }, function(req, accessToken, refreshToken, profile, done) {
        // SQL statement will go here that will check whether a user is signed up for the subdomain they are logging into. It will also check if the user exists in the database
    });
  }
));
...