2012-09-06 31 views
5

Sto utilizzando Passport.js per l'autenticazione con Google tramite OAuth (sto utilizzando la strategia passport-google-oauth). Funziona bene, ma al momento sto reindirizzando l'utente a "/" e desidero inviarli a "/" più il tag hash corrente. Posso inviare il valore hash in un parametro stringa di query, ma non riesco a impostare tale valore sulla proprietà callbackURL dell'oggetto che sto passando per l'autenticazione.Come posso tornare alla posizione corrente dell'hash utilizzando Passport.js?

Qualcuno può fornire un esempio o una spiegazione sul modo corretto di farlo? Non sono obbligato ad usare la stringa di query, mi è sembrato il percorso più diretto, ma sono aperto all'utilizzo di una variabile di sessione o qualcos'altro, se ciò fosse più facile o una pratica migliore.

Grazie.

+0

Se per "hash tag" si intende la parte di frammento di un URL, essere consapevoli che i browser non inviano le informazioni al momento della richiesta, quindi l'unico modo per sapere è se si imposta da soli. – ebohlman

+0

@ebohlman Questo è semplicemente falso. – Beau

risposta

3

È possibile ottenere questo effetto memorizzando l'url di ritorno nella sessione.

// 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); 
}); 
Problemi correlati