如何使用Auth0将用户重定向回原始请求的页面?

时间:2015-11-23 07:23:16

标签: owin nancy auth0

我正在使用带有OWIN和lock.js的Auth0,如this tutorial中所述。唯一的区别是我使用Nancy而不是MVC,但这不应该有任何区别。

登录正常运行。 现在我希望能够将用户重定向到他最初请求的页面,即他重定向到登录表单时输入的网址。

我在Auth0教程或文档中找不到任何信息。

3 个答案:

答案 0 :(得分:0)

通常的做法是将原始URL保存在state参数中,协议(OpenID Connect)保证它将在所有事务中保留。

在nodejs / passport中你会这样做:

//Middleware for routes that require login:
var requiresLogin = function(req, res, next) {
        if (!req.isAuthenticated()) {
            var orignalUrl = encodeURIComponent(new Buffer(req.url).toString('base64'));
            return res.redirect('/login?state=' + orignalUrl);
        }
...

然后在回调网址中:

app.get('/callback',
    passport.authenticate('auth0', { failureRedirect: '/login' }),
        function(req, res) {
            if (!req.user) {
                throw new Error('user null');
            }

            if(req.query.state){
                var orignalUrl = new Buffer(decodeURIComponent(req.query.state), 'base64').toString();
                return res.redirect(orignalUrl);
            }

            res.redirect("/");
});

et voila!

答案 1 :(得分:0)

Eugenio的回答指出了我正确的方向,我在这里发布完整的解决方案作为参考。

返回网址需要存储在state参数中。 Auth0 OWIN包在成功登录后支持重定向,但要求重定向URL在状态参数中命名为ru

这就是锁定设置的样子:

lock.show({
    // Other lock setup params
    authParams: {
        state: 'ru=RETURN_URL_HERE'
    }
});

答案 2 :(得分:0)

我试过这个并没有为我工作。原因是配置似乎已更改为构造函数而不是show方法。此外,为了使其工作,我还需要做些不同的事情,例如设置auth.params.state属性,auth.redirectUrlauth.responseType属性。在下面的链接中,我以更好的方式描述了我是如何解决它的。我正在使用React Router开发一个React应用程序,但我描述的解决方案有点笼统。

https://github.com/auth0/wp-auth0/issues/29#issuecomment-252040395