Twitter(または他のOAuthプロバイダ)は変更できません。これらはすべて、1つのドメインに1つのコールバックしか提供しません。簡単な解決策は、http://domain.comからすべてのリクエストをhttp://www.domain.comにリルートすることです。すべての訪問者は認証前にwww.domain.comにアクセスしてください。あなたのDNSまたはreq.headerリダイレクトサーバー側でこれを行うことができる必要があります:
this answerからコピー
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();
}
})
。
passport.jsで認証する場合は、コールバックURLを指定しよう:
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);
});
});
}
));
をやTwitterで構成されたようcallbackURLがまったく同じであることを確認してください。 localhost上で開発用のノードを実行している場合は、2つの異なるキーファイルを試して、127.0.0.1:3000のコールバックアドレスとして別の認証アプリケーションを作成します。
if (app.get('env') == 'development') {
auth_keys = require('./lib/keys_dev');
}
if (app.get('env') == 'production') {
auth_keys = require('./lib/keys_live');
}
いくつかのコードを、最小限のテストケースにすることをおすすめします。 – ebohlman
これはコードの問題ではありません。これは、1つのホスト名(IIRC)へのコールバックのみを許可するtwitters認証メカニズムです。コードを見る必要はありません。 – EhevuTov
authメカニズムに問題があっても、コンソール出力のような内部サーバーエラーの詳細がより良い回答を提供する可能性があります。 – Patrick