everyauth.twitter.redirectPath( '/'); - 根据原始页面URL进行更改

时间:2012-01-20 16:45:15

标签: node.js redirect everyauth

我希望用户能够共享安全内容的链接,例如。 www.mysite.com/#/article1,然后当另一个用户打开此链接时,他们会被重定向到登录页面,然后在完成后,他们会被重定向到相同的URL。

我有一个单页应用程序,所以使用哈希标签,但我也没有看到任何方法使用普通网址。

目前.redirectPath('/')必须是一个字符串,所以我不能使它成为一个返回字符串的函数,也不能访问req.url所以不知道我怎么能动态地得到它值。

这不是特定于Twitter的问题,我相信所有的oAuth登录都是一样的。

2 个答案:

答案 0 :(得分:4)

我遇到了同样的问题。 此时我正在使用一个简单的会话模式来实现这一点,尽管它不是最好的解决方案。

例如:

app.get('/login/facebook', function(req, res) {
  req.session.redirect = req.header('referer');
  res.redirect('/auth/facebook');
});

并在你的每个人的重定向路径上:

app.get('/', function(req, res) {
  if (req.session.redirect) {    
    res.redirect(req.session.redirect);
    req.session.redirect = null;
  } else {
   res.render('index');
  }
});

答案 1 :(得分:0)

我略微改进了上述解决方法(不能将其称为解决方案,因为它似乎缺少everyauth中的功能):

第一部分保持不变:

app.get('/login/facebook', function(req, res) {
    req.session.redirect = req.header('referer');
    res.redirect('/auth/facebook');
});

第二部分移至:everyauth.facebook.findOrCreateUser

findOrCreateUser(function(session, accessToken, accessTokenExtra, facebookUser){
    var promise = this.Promise();

    // your logic of finding or creating the user here

    if (session.redirect) { // just before the return
        this.redirectPath(session.redirect); // dynamic path
        delete session.redirect;
    }
    return promise;
}).
redirectPath('/'). // static path