2012-09-06 55 views
5

Estoy usando Passport.js para autenticarme con Google a través de OAuth (estoy usando la estrategia pasaporte-google-oauth). Funciona bien, pero actualmente estoy redireccionando al usuario a "/", y me gustaría enviarlos a "/" más la etiqueta hash actual. Puedo enviar el valor hash en un parámetro de cadena de consulta, pero parece que no puedo establecer ese valor en la propiedad callbackURL del objeto que paso para autenticar.¿Cómo puedo volver a la ubicación hash actual usando Passport.js?

¿Alguien puede dar un ejemplo o una explicación sobre la forma correcta de hacerlo? No estoy obligado a usar la cadena de consulta, simplemente me pareció la ruta más directa, pero estoy abierto a usar una variable de sesión u otra cosa, si eso fuera más fácil o una mejor práctica.

Gracias.

+0

Si por "hash tag" quiere decir la porción fragmento de una URL, tenga en cuenta que los navegadores nunca envían esa información al hacer peticiones, por lo que la única manera de saber es si se establece por sí mismo. – ebohlman

+0

@ebohlman Eso es simplemente falso. – Beau

Respuesta

3

Puede lograr este efecto almacenando la URL de retorno en la sesión.

// server 
var app, express; 

express = require('express'); 

app = express(); 

app.configure(function() { 
    app.use(express.cookieSession({secret: 'shh'})); 
}); 

app.get('/auth/twitter', function(req, res, next) { 
    // to return to '/#/returnHash', request this url: 
    // http://example.com/auth/twitter?return_url=%2F%23%2FreturnHash 

    // on the client you can get the hash value like this: 
    // encodeURIComponent("/"+window.location.hash) 
    req.session.return_url = req.query.return_url; 
    next(); 
}, passport.authenticate('twitter')); 

app.get('/auth/twitter/callback', passport.authenticate('twitter', { 
    failureRedirect: '/login' 
}), function(req, res) { 
    var url = req.session.return_url; 
    delete req.session.return_url; 

    // redirects to /#/returnHash 
    res.redirect(url); 
}); 
Cuestiones relacionadas