2012-08-16 6 views
5

Ho due nomi host spediti allo stesso IP dal mio DNS:Come autenticarsi con Twitter con più nomi host da un dominio utilizzando la stessa app di Twitter?

  • theark.info
  • www.theark.info

ho impostato in modo esplicito il mio callback e il nome di dominio nel mio App Twitter utilizzando theark.info. Qual è il modo migliore per assicurarsi che posso usare lo stesso Twitter App per Oauth utilizzando www.theark.info, come ho attualmente ottengo un errore:

Internal Server Error

Nel mio DNS ho un CNAME www nel mio DNS che punta a theark.info

Forse ho bisogno di manipolare il DOM usando Express e Javacsript sulle richieste?

+0

Mostrare un codice, preferibilmente un caso di test minimo. – ebohlman

+0

Non si tratta di un problema di codice. È il meccanismo di autorizzazione dei twitter, che consente solo una richiamata a un nome host, IIRC. Non dovresti avere bisogno di vedere alcun codice. – EhevuTov

+0

Anche se si tratta di un problema con il meccanismo di autenticazione, alcuni dettagli sull'errore del server interno, come l'output di una console, potrebbero fornire risposte migliori. – Patrick

risposta

2

Non è possibile modificare Twitter (o qualsiasi altro provider OAuth), tutti offrono solo una richiamata a un dominio. Una soluzione facile è reinstradare tutte le richieste da http://domain.com a http://www.domain.com, in modo che tutti i visitatori finiscano su www.domain.com prima di autenticarsi. Si dovrebbe essere in grado di fare questo sul vostro DNS o con un lato server req.header reindirizzamento:

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

copiato da this answer.

Quando l'autenticazione con passport.js, provate a specificare l'URL di callback:

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

E assicurarsi che il callbackURL è esattamente lo stesso come configurato twitter. Se stai eseguendo il nodo per lo sviluppo su localhost, prova due diversi file chiave e crea un'altra app di autenticazione su Twitter con 127.0.0.1:3000 come indirizzo di richiamata. È possibile cambiare i file chiave per dev e produzione:

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

Come stai? Per quanto ne so, il DNS si limita a risolvere un IP. In realtà non cambia il nome di dominio con cui il browser parla o come. Ho un CNAME 'www' nel mio DNS che punta a 'theark.info' – EhevuTov

+0

Ho modificato la risposta un piccolo pizzico per rispondere al nocciolo della questione. Fondamentalmente, sono abbastanza sicuro che richiederà un reindirizzamento HTTP sul lato server. Grazie per la risposta. – EhevuTov

+0

CNAME dovrebbe funzionare, non è vero? – Patrick

Problemi correlati