everyauth.twitter.redirectPath( '/'); – 根据原始网页url进行更改

我想要一个用户能够共享一个链接来保护内容,例如。 www.mysite.com/#/article1,然后当另一个用户打开这个链接时,他们被redirect到login页面,然后完成redirect到相同的URL。

我有一个单一的页面应用程序,所以使用散列标签,但我不认为有任何方法与常规的URL做到这一点。

目前.redirectPath('/')必须是一个string,所以我不能让它返回一个string的函数,也没有访问req.url,所以不知道我将如何能够dynamic获取该值。

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

       

网上收集的解决方案 "everyauth.twitter.redirectPath( '/'); – 根据原始网页url进行更改"

我有同样的问题。 在这个时候,我正在使用一个简单的会话模式来实现这一点,尽pipe这不是最好的解决scheme。

例如:

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

并在你everyauth的redirectpath:

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

我稍微改进了上面的解决方法(不能把它称为一个解决scheme,因为它似乎在everyauthfunction缺乏):

第一部分保持不变:

 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