2012-09-06 11 views
5

Ich verwende Passport.js, um mich mit Google über OAuth zu authentifizieren (ich verwende die Pass-google-oauth-Strategie). Es funktioniert gut, aber ich bin derzeit umleiten den Benutzer zu "/", und ich möchte sie an "/" plus dem aktuellen Hash-Tag senden. Ich kann den Hash-Wert in einem Abfragezeichenfolgenparameter senden, aber ich kann nicht scheinen, diesen Wert auf die Eigenschaft callbackURL des Objekts festzulegen, das ich zur Authentifizierung übergebe.Wie kann ich mit Passport.js zum aktuellen Hash-Speicherort zurückkehren?

Kann jemand ein Beispiel oder eine Erklärung zur richtigen Vorgehensweise geben? Ich bin nicht verpflichtet, die Query-Zeichenkette zu verwenden, es schien einfach die einfachste Route zu sein, aber ich bin offen dafür, eine Sitzungsvariable oder etwas anderes zu verwenden, wenn das einfacher oder besser wäre.

Vielen Dank.

+0

Wenn von „Hash-Tag“ können Sie das Fragment Teil einer URL bedeuten, bewusst sein, dass Browser nie diese Informationen senden, wenn Anfragen macht, so dass der einzige Weg, es zu wissen, ist, wenn Sie es selbst gesetzt. – ebohlman

+0

@ebohlman Das ist einfach nicht wahr. – Beau

Antwort

3

Sie können diesen Effekt erzielen, indem Sie die Rückkehr-URL in der Sitzung speichern.

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