2012-08-16 16 views
5

Tengo dos nombres de host que son enviadas a la misma IP por mi DNS:Cómo Twitter ¿Autentica con múltiples nombres de host de un dominio usando la misma aplicación de Twitter?

  • theark.info
  • www.theark.info

que establecer explícitamente mi devolución de llamada y nombre de dominio en mi Aplicación de Twitter usando theark.info. Cuál es la mejor manera de asegurarse de que pueda usar la misma aplicación Twitter para Oauth usando www.theark.info, ya que actualmente sale un error:

Internal Server Error

En mi DNS Tengo un CNAME www en mi DNS que apunta a theark.info

¿Quizás necesite manipular el DOM utilizando Express y Javacsript en las solicitudes?

+0

Muestra un código, preferiblemente un caso de prueba mínimo. – ebohlman

+0

No es un problema de código. Es el mecanismo de autenticación de twitters, que solo permite una devolución de llamada a un nombre de host, IIRC. No deberías necesitar ver ningún código. – EhevuTov

+0

Incluso si se trata de un problema con el mecanismo de autenticación, algunos detalles más sobre el error interno del servidor, como una salida de consola, podrían proporcionar mejores respuestas. – Patrick

Respuesta

2

No puede cambiar Twitter (ni a ningún otro proveedor de OAuth), todos ellos ofrecen solo una devolución de llamada a un dominio. Una solución fácil es redirigir todas las solicitudes de http://domain.com a http://www.domain.com, por lo que todos los visitantes terminan en www.domain.com antes de autenticarse. Usted debe ser capaz de hacer esto por su DNS o con un servidor del lado req.header redirección:

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

Copiado del this answer.

Cuando la autenticación con passport.js, tratar de especificar la URL de devolución de llamada:

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

Y asegúrese de que el callbackURL es exactamente el mismo que el configurado en Twitter. Si está ejecutando un nodo para desarrollo en localhost, intente con dos archivos de clave diferentes y cree otras aplicaciones de autenticación en Twitter con 127.0.0.1:3000 como dirección de devolución de llamada. Puede cambiar los archivos clave para dev y producción:

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

¿Cómo se reurbaniza? Que yo sepa, DNS simplemente se resuelve en una IP. En realidad, no cambia el nombre de dominio con el que habla su navegador o como. Tengo un CNAME 'www' en mi DNS que apunta a 'theark.info' – EhevuTov

+0

He editado la respuesta pequeña pizca para responder al meollo del asunto. Básicamente, estoy bastante seguro de que requerirá una redirección HTTP del lado del servidor. Gracias por la respuesta. – EhevuTov

+0

El CNAME debería funcionar, ¿no es así? – Patrick

Cuestiones relacionadas