Nie można zmienić Twittera (ani żadnego innego dostawcy OAuth), wszystkie oferują tylko jedno wywołanie zwrotne do jednej domeny. Łatwym rozwiązaniem jest przekierowanie wszystkich żądań z http://domain.com na http://www.domain.com, aby wszyscy odwiedzający znaleźli się na stronie www.domain.com przed uwierzytelnieniem. Powinieneś być w stanie to zrobić na serwerze DNS lub z req.header przekierowania po stronie serwera:
app.get('/*', function(req, res, next) {
if (req.headers.host.match(/^www/) !== null) {
res.redirect('http://' + req.headers.host.replace(/^www\./, '') + req.url);
} else {
next();
}
})
Skopiowane z this answer.
Po uwierzytelnieniu z passport.js, spróbuj podać adres URL wywołania zwrotnego:
passport.use(new TwitterStrategy({
consumerKey: auth_keys.twitter.consumerKey,
consumerSecret: auth_keys.twitter.consumerSecret,
callbackURL: auth_keys.twitter.callbackURL
},
function(token, tokenSecret, profile, done) {
process.nextTick(function() {
User.twitterAuth({ profile: profile }, function (err, user) {
return done(err, user);
});
});
}
));
i upewnij się callbackURL jest dokładnie taka sama, jak skonfigurować w Twitterze. Jeśli używasz węzła do rozwoju na localhost, wypróbuj dwa różne pliki kluczy i utwórz kolejne aplikacje uwierzytelniające na Twitterze z 127.0.0.1:3000 jako adres zwrotny. Możesz zmienić kluczowe pliki dla dev i produkcji:
if (app.get('env') == 'development') {
auth_keys = require('./lib/keys_dev');
}
if (app.get('env') == 'production') {
auth_keys = require('./lib/keys_live');
}
Pokaż kod, najlepiej minimalny test. – ebohlman
To nie jest problem z kodem. Jest to mechanizm uwierzytelniania twitters, który pozwala tylko na oddzwonienie do jednej nazwy hosta, IIRC. Nie musisz widzieć żadnego kodu. – EhevuTov
Nawet jeśli jest to problem z mechanizmem uwierzytelniania, niektóre bardziej szczegółowe informacje na temat błędu serwera wewnętrznego, takie jak dane wyjściowe konsoli, mogą dostarczyć lepszych odpowiedzi. – Patrick