Я использую следующий код для проверки подлинности паспорт-твиттер: https://github.com/scotch-io/easy-node-authentication/blob/twitter/config/passport.js
Мой код выглядит так, когда вызывается обратный вызов:
passport.use(
new TwitterStrategy(
{
consumerKey: TWITTER_CONSUMER_KEY,
consumerSecret: TWITTER_CONSUMER_SECRET,
callbackURL: `${APP_URL}/auth/twitter/callback`,
},
async (accessToken, accessTokenSecret, profile, done) => {
debugger;
return done(null, profile);
},
),
);
Мое приложение связывает несколько учетных записей социальных сетей с учетной записью приложения пользователя и сохраняет их данные для аутентификации для последующего использования. Это немного отличается от общего варианта использования passport
, где вы используете учетную запись социальной сети для входа в свое приложение.
Мой код разделяет интерфейс и бэкэнд-сервис, и я могу пройти весь процесс аутентификации. Когда аутентифицированная информация возвращается, я не могу получить зарегистрированного пользователя, поскольку у меня нет доступа к заголовкам запросов.
Середина после этого - функция serializeUser
, которая, кажется, должна снова сериализовать пользователя моего приложения. Или нет? Я не уверен, что мне действительно нужно сериализовать пользователя приложения или просто сериализовать информацию о пользователе Twitter.
В любом случае, если он дойдет до функции serializeUser
, я не могу передать что-либо промежуточному программному обеспечению, которое появится позже, потому что done(null, data)
использует любую информацию из data
для сериализации.
РЕДАКТИРОВАТЬ # 1 : После дальнейшего изучения документов паспорта я могу использовать собственный обратный вызов: passportjs.org/docs, однако я все еще сталкиваюсь с проблемами, зная, какой пользователь прошел проверку подлинности. Обратный вызов содержит только информацию о пользователе в твиттере, ничто не связывает эту информацию с пользователем приложения.
EDIT # 2 : в документах есть пример подключения: http://www.passportjs.org/docs/authorize/, хотя для этого требуется, чтобы пользователь вошел в систему и сеансы были включены. Если мы собираемся использовать приложение без сохранения состояния, чтобы мы могли кластеризовать основное приложение, проводить сеансы - плохая идея, если, возможно, вы не выбросили его в централизованную БД или что-то в этом роде.