Подтвердить что ты не робот

Паспорт-твиттер: не удалось найти токен запроса в сеансе

только вчера на Heroku у меня появилась эта ошибка при входе в twitter в express

Error: failed to find request token in session
    at Strategy.<anonymous> (/app/node_modules/passport-twitter/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth.js:120:54)
    at Strategy.authenticate (/app/node_modules/passport-twitter/lib/passport-twitter/strategy.js:82:40)
    at Passport.authenticate (/app/node_modules/passport/lib/passport/middleware/authenticate.js:153:14)
    at callbacks (/app/node_modules/express/lib/router/index.js:272:11)
    at param (/app/node_modules/express/lib/router/index.js:246:11)
    at pass (/app/node_modules/express/lib/router/index.js:253:5)
    at Router._dispatch (/app/node_modules/express/lib/router/index.js:280:4)
    at Object.handle (/app/node_modules/express/lib/router/index.js:45:10)
    at Context.next (/app/node_modules/express/node_modules/connect/lib/http.js:204:15)
    at Context.<anonymous> (/app/node_modules/passport/lib/passport/context/http/actions.js:64:8)

любое предложение?

4b9b3361

Ответ 1

YUHU Я решил. проблема заключалась в том, что несколько раз мой сайт имел www, а иногда и нет, поэтому были проблемы с сеансами, видимо.

Ответ 2

Я также столкнулся с этой ошибкой, используя Node.js, Express и Passport, хотя мое исправление отличается от описанного выше.

Я скопировал и вставил следующий код из документации экспресс-сессии...

app.use(session({ secret: 'keyboard cat', key: 'sid', cookie: { secure: true }}))

Этот бит secure: true инструктирует express-session использовать "https", который у меня нет в моей среде разработки. Как только я удалил его, ошибка исчезла.

Ответ 3

В настройках приложения Twitters убедитесь, что следующие поля имеют следующие значения:

Веб-сайт: http://127.0.0.1:3000

URL-адрес обратного вызова: http://127.0.0.1:3000/auth/twitter/callback

** Я работаю с номером порта 3000. Вы можете изменить это на любой порт, с которым работаете.

Теперь перейдите в http://127.0.0.1:3000 в своем браузере. Это должно решить вашу проблему.

Ответ 4

Это абсолютно случайный случай, и я Node newb... поэтому применяйте соль либерально.

Я видел эту ошибку и очень похожую трассировку стека сегодня вечером. Оказалось, что я только что изменил свой маршрут обратного вызова, чтобы выглядеть так:

app.use('/auth/twitter/callback', twitterCallback);

Посмотрите, как я использовал use вместо get? Как только я изменил его, я прекратил эту ошибку.

Моя трассировка стека выглядела несколько иначе:

DEBUG: Error: failed to find request token in session at Strategy. (/Users/drhayes/src/incursion/node_modules/passport-twitter/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth.js:122:54)
at Strategy.authenticate (/Users/drhayes/src/incursion/node_modules/passport-twitter/lib/passport-twitter/strategy.js:82:40)
at Passport.authenticate (/Users/drhayes/src/incursion/node_modules/passport/lib/passport/middleware/authenticate.js:153:14)
at Object.handle (native)
at next (/Users/drhayes/src/incursion/node_modules/express/node_modules/connect/lib/http.js:204:15)
at /Users/drhayes/src/incursion/node_modules/passport/lib/passport/middleware/authenticate.js:99:9
at /Users/drhayes/src/incursion/node_modules/passport/lib/passport/http/request.js:46:7
at pass (/Users/drhayes/src/incursion/node_modules/passport/lib/passport/index.js:229:30)
at /Users/drhayes/src/incursion/node_modules/passport/lib/passport/index.js:237:36
at /Users/drhayes/src/incursion/routes/auth.coffee:42:14

Недавно изменился ваш источник? Есть ли ошибка исправления в развернутом пуле?

Ответ 5

Это очень поздний ответ, но я просто решил, что это может произойти. Когда ребята, которые сделали экспресс-сессию, сказали, что MemoryStore не предназначен для производства, они действительно это значили.

Если вы используете кластеризацию (pm2 или навсегда или работаете на Heroku), хранилища файлов cookie, основанные на памяти, имеют свой собственный набор проблем. Вы часто теряете куки или коррумпируете их (потому что на стороне сервера есть два или несколько отдельных процессов, а не совместное использование общей памяти).

Если вы хотите запустить приложение Node с помощью кластеров, вам нужно использовать Redis или некоторое хранилище файлов cookie с поддержкой DB

Ответ 6

Twitter не принимает localhost, поэтому мне пришлось использовать следующие настройки:

В https://apps.twitter.com/app/....

website = http://127.0.0.1:3000
callback url: http://localhost:3000/login/twitter/callback

В паспорте:

'callbackURL'       : 'http://localhost:3000/login/twitter/callback'

Примечание. URL-адрес обратного вызова twitter работает с использованием как 127.0.0.1, так и localhost

Ответ 7

Я использовал паспорт-flickr и исправил ту же проблему, изменив 127.0.0.1 на localhost

passport.use(new FlickrStrategy({
    ...
    callbackURL: "http://localhost:3000/auth/flickr/callback"
  },

Ответ 9

У меня та же проблема, решение было, взять сайт, используя http://127.0.0.1:3000/ вместо http://localhost: 3000, когда запрос происходит, все работает хорошо.

Ответ 10

У меня это было однажды, я исправил его, изменив URL-адрес обратного вызова

от 127.0.0.1

localhost

Ответ 11

sameSite кажется, еще один преступник. Исходя из

const SESSION_OPTIONS = {
  ...
  cookie: {
    sameSite: true,
  },
};

в

const SESSION_OPTIONS = {
  ...
  cookie: {
    sameSite: app.get('env') === 'production' ? true : false,
  },
};

помогло.