Ошибка: не удалось найти токен запроса в сеансе
Я обнаружил несколько проблем в основном паспортном репо, однако я думаю, что это в первую очередь относится к этой конкретной стратегии, поскольку я могу успешно пройти аутентификацию с использованием стратегии passport-google-oauth.
Error: failed to find request token in session
at Strategy.OAuthStrategy.authenticate (/home/glug/application/node_modules/passport-dropbox/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth.js:124:54)
at attempt (/home/glug/application/node_modules/passport/lib/passport/middleware/authenticate.js:243:16)
at Passport.authenticate (/home/glug/application/node_modules/passport/lib/passport/middleware/authenticate.js:244:7)
at callbacks (/home/glug/application/node_modules/express/lib/router/index.js:161:37)
at param (/home/glug/application/node_modules/express/lib/router/index.js:135:11)
at pass (/home/glug/application/node_modules/express/lib/router/index.js:142:5)
at Router._dispatch (/home/glug/application/node_modules/express/lib/router/index.js:170:5)
at Object.router (/home/glug/application/node_modules/express/lib/router/index.js:33:10)
at Context.next (/home/glug/application/node_modules/express/node_modules/connect/lib/proto.js:190:15)
at Context.actions.pass (/home/glug/application/node_modules/passport/lib/passport/context/http/actions.js:77:8)
Я использую Redis в качестве хранилища сеансов, однако, даже после устранения этого, он все еще не работает с идентичным сообщением об ошибке.
var DropboxStrategy = require('passport-dropbox').Strategy;
app.configure(function(){
app.set('port', config.express.port);
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({
// store: new RedisStore({ client: redis}),
secret: config.express.secret
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
});
passport.serializeUser(function(user, done) {
// console.log('Serializing: ' + JSON.stringify(user));
done(null, user);
});
passport.deserializeUser(function(obj, done) {
// console.log('Deserializing: ' + obj);
done(null, obj);
});
passport.use(new DropboxStrategy({
consumerKey: config.dropbox.key,
consumerSecret: config.dropbox.secret,
callbackURL: config.dropbox.callbackURL
},
function(token, tokenSecret, profile, done) {
// My storage function
return done(null, profile);
}
));
Я счастлив попробовать что-нибудь, я подал проблему в репо, но я думаю, что это может быть что-то, что я делаю неправильно, а не что-то не так с репозиторием паспорта-пачки.
2 ответа
... вздох. Я забыл, что изменил поддомен. Таким образом, cookie не был читаемым, потому что доменное имя было другим.
Эй, если у кого-то все еще есть проблема, у меня есть другое решение...
добавить этот код:
app.use(passport.session({ secret: 'Shhh.. This is a secret', cookie: { secure: true } }));
просто добавь cookie: { secure: true }
и это будет работать просто отлично...
У меня тоже была эта проблема и выше техника помогла мне решить эту проблему.
Чтобы решить эту проблему в моем случае, необходимо было настроить файл хоста на использование личного домена вместо localhost или 127.0.0.1..