Ответ 1
YUHU Я решил. проблема заключалась в том, что несколько раз мой сайт имел www, а иногда и нет, поэтому были проблемы с сеансами, видимо.
только вчера на 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)
любое предложение?
YUHU Я решил. проблема заключалась в том, что несколько раз мой сайт имел www, а иногда и нет, поэтому были проблемы с сеансами, видимо.
Я также столкнулся с этой ошибкой, используя Node.js, Express и Passport, хотя мое исправление отличается от описанного выше.
Я скопировал и вставил следующий код из документации экспресс-сессии...
app.use(session({ secret: 'keyboard cat', key: 'sid', cookie: { secure: true }}))
Этот бит secure: true инструктирует express-session использовать "https", который у меня нет в моей среде разработки. Как только я удалил его, ошибка исчезла.
В настройках приложения Twitters убедитесь, что следующие поля имеют следующие значения:
Веб-сайт: http://127.0.0.1:3000
URL-адрес обратного вызова: http://127.0.0.1:3000/auth/twitter/callback
** Я работаю с номером порта 3000. Вы можете изменить это на любой порт, с которым работаете.
Теперь перейдите в http://127.0.0.1:3000 в своем браузере. Это должно решить вашу проблему.
Это абсолютно случайный случай, и я 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
Недавно изменился ваш источник? Есть ли ошибка исправления в развернутом пуле?
Это очень поздний ответ, но я просто решил, что это может произойти. Когда ребята, которые сделали экспресс-сессию, сказали, что MemoryStore не предназначен для производства, они действительно это значили.
Если вы используете кластеризацию (pm2 или навсегда или работаете на Heroku), хранилища файлов cookie, основанные на памяти, имеют свой собственный набор проблем. Вы часто теряете куки или коррумпируете их (потому что на стороне сервера есть два или несколько отдельных процессов, а не совместное использование общей памяти).
Если вы хотите запустить приложение Node с помощью кластеров, вам нужно использовать Redis или некоторое хранилище файлов cookie с поддержкой DB
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
Я использовал паспорт-flickr и исправил ту же проблему, изменив 127.0.0.1 на localhost
passport.use(new FlickrStrategy({
...
callbackURL: "http://localhost:3000/auth/flickr/callback"
},
В моем случае это связано с обратным прокси-сервером и безопасным файлом cookie. Настройка app.set('trust proxy', 1)
устраняет проблему.
https://github.com/expressjs/session/issues/281#issuecomment-191327863
У меня та же проблема, решение было, взять сайт, используя http://127.0.0.1:3000/ вместо http://localhost: 3000, когда запрос происходит, все работает хорошо.
У меня это было однажды, я исправил его, изменив URL-адрес обратного вызова
от 127.0.0.1
localhost
sameSite
кажется, еще один преступник. Исходя из
const SESSION_OPTIONS = {
...
cookie: {
sameSite: true,
},
};
в
const SESSION_OPTIONS = {
...
cookie: {
sameSite: app.get('env') === 'production' ? true : false,
},
};
помогло.