登录angular2后,Auth0重定向回调用url

时间:2016-08-29 06:35:08

标签: angular login angularjs-routing auth0

登录后,auth0会将我重定向回angular2上的回拨网址。如何让它转到我给路由的路径而不重定向到回调网址。

1 个答案:

答案 0 :(得分:1)

我一直在解决同样的问题..看来你有几个选择。

a)使用弹出模式

这很容易实现,但Auth0建议使用此功能,因为浏览器不一致。 (即一些IE and Chrome/Firefox on iOS

就像在锁定选项对象中添加标记一样简单

var lockOptions = {
  auth: {
    redirect: false
  }
}

Popup Mode Docs

b)在LocalStorage中保存状态

Auth0建议将状态保存到LocalStorage,如果您希望允许用户从中断处继续。

因此,在触发lock.show()之前,您可以将当前的URL /路径/状态/等保存到本地存储中。就我而言,我使用的是authGuard。

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
    if (this.authService.isLoggedIn) {
        return Promise.resolve(true);
    }

    // Store the attempted URL for redirecting after auth
    localStorage.setItem('redirectUrl', state.url);

    // Navigate to the login page
    this.router.navigate([`${environment.loggedOutRoute}`]);

    return Promise.resolve(false);
}

然后在你的auth回调中:

// On authentication
this.lock.on('authenticated', (authResult: any) => {
    // Save the token in LS
    localStorage.setItem('token', authResult.idToken);

    // Hide the login modal
    this.lock.hide();

    // Redirect the user
    const redirectUrl: string = localStorage.getItem('redirectUrl');
    if (redirectUrl) {
        this.router.navigate([redirectUrl]);
    } else {
        this.router.navigate(['/overview']);
    }
});