2012-09-06 3 views
5

저는 Passport.js를 사용하여 OAuth를 통해 Google 인증을 받았습니다 (저는 passport-google-oauth 전략을 사용하고 있습니다). 잘 작동하지만 현재 사용자를 "/"로 리디렉션하고 있으며 현재 해시 태그 외에 "/"로 보내고 싶습니다. 쿼리 문자열 매개 변수에 해시 값을 보낼 수는 있지만 해당 값을 인증을 위해 전달하는 개체의 callbackURL 속성으로 설정할 수 없습니다.Passport.js를 사용하여 현재 해시 위치로 어떻게 되돌릴 수 있습니까?

누군가 올바른 방법을 제시 할 수 있습니까? 나는 쿼리 문자열을 사용하는 것이 아니라 가장 직설적 인 경로처럼 보였습니다.하지만 세션 변수 나 다른 것을 사용하는 것이 더 쉽습니다.

감사합니다.

+0

는 요청을 할 때 브라우저가 해당 정보를 보내지 않을 것을 유의하십시오. – ebohlman

+0

@ebohlman 그건 사실이 아닙니다. – Beau

답변

3

세션에 return url을 저장하면이 효과를 얻을 수 있습니다. '해시 태그'에 의해 당신이 URL의 조각 부분을 의미하는 경우 스스로를 설정하면 유일한 방법은 그것이 알고 있도록

// 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); 
}); 
관련 문제