, как вы указали вы используете Passport.JS стратегии Facebook, вы можете использовать состояние поля. вам нужно будет создать 2 middlewares, один из которых будет использоваться до того, как вы вызовете аутентификацию для URI входа в систему, а другой будет использоваться до URI loginCallback.
Имейте в виду, что вам также необходимо будет обновить стратегию для правильного управления пользователями. помните, вы не можете использовать 'req.user,
Мне лично тоже не нравятся сеансы, но это очень часто, чтобы найти информацию о том, как использовать auth с ними.
Проверьте, как этот метод вызывает метод «authenticate »passpassing, отключая сеанс, а также является промежуточным способом, вы можете, конечно, сделать это с вашим маршрутизатором router.get (...), но я нашел это хорошая практика, так как в моем приложении я использую локальную, facebook и JWT-аутентификацию одновременно, и мне нравится иметь последовательный шаблон. Кроме того, если вы планируете создавать и сохранять токен. вы можете столкнуться с проблемами, связанными с обратным вызовом, если вы используете асинхронное хранилище, например mongoDB.
В соответствии с документацией вы должны использовать авторизацию, если вы будете использовать этот endopoint для подключения к локальной учетной записи, но поскольку у вас вообще нет сеансов, нет смысла использовать, тем не менее, я думаю, что у вас должно быть 2 пути, один для регистрации в facebook, а другой, если вы планируете объединить локальную учетную запись с facebook, в случае, когда токен, переданный в facebook, может определить, был ли его первый раз или подключиться)
Не забудьте отключить сеанс в оба аутентифицируют вызовы.
function facebookTempTokenCreate(req, res, next) {
// create the token the way you think is best,
// I personally prefer to create a JWT and save it somewhere in the DB.
// also you need to pass it to the next middleware by saving the value
// in the req. name can be anything you want.
// but make sure is quite unique as you do not want to break other libraries.
req.facebookConnectToken = 'that_sweet_token';
next(); // dont forget to continue to next middleware.
}
function facebookAuthenticate(req, res, next) {
passport.authenticate('facebook', {
scope : 'email',
callbackURL : 'your_app_callback_uri',
state : req.facebookConnectToken,
session : false
})(req,res,next);
}
function facebookAuthenticateCallback(req, res, next) {
passport.authenticate('facebook', {
scope : 'email',
session : false
})(req,res,next);
}
function facebookTempTokenValidate(req, res, next) {
console.log('here we validate the token: ' + req.query.state);
next();//dont forget to pass execution to next middleware.
}
app.get('/facebook/login', facebookTempTokenCreate, facebookAuthenticate);
app.get('/facebook/login/callback', facebookTempTokenValidate, facebookAuthenticateCallback);
Дополнительную информацию можно найти здесь: https://github.com/jaredhanson/passport-facebook/issues/14
Надеюсь, это может вам помочь.