2012-08-16 2 views
5

Ich habe zwei Host-Namen, die von meiner DNS auf den gleichen IP gesendete:Wie Twitter Mit mehreren Hostnamen aus einer Domäne mit der gleichen Twitter App authentifizieren?

  • theark.info
  • www.theark.info

richte ich meinen Rückruf und Domain-Namen explizit in Twitter App mit theark.info. Was ist der beste Weg, um sicherzustellen, dass ich die gleiche Twitter App für OAuth www.theark.info verwenden kann, da ich zur Zeit eine Fehlermeldung erhalten:

Internal Server Error

In meinem DNS ich ein CNAME www in meiner DNS habe, die theark.info Punkte

Vielleicht muss ich das DOM mit Express und Javacsript auf Anfragen manipulieren?

+0

Zeigen Sie einen Code, vorzugsweise einen minimalen Testfall. – ebohlman

+0

Es ist kein Code-Problem. Es ist Twitters Auth-Mechanismus, der nur einen Rückruf auf einen Hostnamen erlaubt, IIRC. Sie sollten keinen Code sehen müssen. – EhevuTov

+0

Auch wenn es ein Problem mit dem Authentifizierungsmechanismus ist, könnten einige Details zum internen Serverfehler wie eine Konsolenausgabe bessere Antworten liefern. – Patrick

Antwort

2

Sie können Twitter (oder einen anderen OAuth-Anbieter) nicht ändern, sie bieten alle nur einen Rückruf zu einer Domäne an. Eine einfache Lösung besteht darin, alle Anfragen von http://domain.com auf http://www.domain.com umzuleiten, sodass alle Besucher vor der Authentifizierung auf www.domain.com landen. Sie sollten diese in der Lage sein, auf dem DNS zu tun oder mit einer req.header Redirect Server-Seite:

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();  
    } 
}) 

von this answer kopiert.

Wenn mit passport.js Authentifizierung, versuchen Sie die Callback-URL angeben:

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); 
     }); 
    }); 
    } 
)); 

Und stellen Sie sicher, dass die CallbackURL ist genau das gleiche wie in Twitter konfiguriert. Wenn Sie einen Knoten für die Entwicklung auf localhost ausführen, versuchen Sie zwei verschiedene Schlüsseldateien und erstellen Sie eine weitere Authentifizierungsanwendung auf Twitter mit 127.0.0.1:3000 als Rückrufadresse. Sie können die Schlüsseldateien für Entwicklung und Produktion wechseln:

if (app.get('env') == 'development') { 
    auth_keys = require('./lib/keys_dev'); 
} 
if (app.get('env') == 'production') { 
    auth_keys = require('./lib/keys_live'); 
} 
+0

Wie reeroute Sie? Soweit ich weiß, löst DNS nur eine IP auf. Es ändert nicht wirklich den Domain-Namen, mit dem Ihr Browser spricht oder wie. Ich habe einen CNAME "www" in meinem DNS, der auf "theark.info" zeigt. – EhevuTov

+0

Ich bearbeitete die Antwort kleine Prise, um den Kern der Sache zu beantworten. Grundsätzlich bin ich mir ziemlich sicher, dass es eine serverseitige HTTP-Umleitung erfordert. Danke für die Antwort. – EhevuTov

+0

Der CNAME sollte funktionieren, oder? – Patrick