直接登录后,auth0重定向到http:// localhost:4200 / null

时间:2018-08-10 16:05:20

标签: angular auth0

我尝试在this tutorial之后使用auth0实现访问管理。当我使用身份验证保护程序访问受保护的路由时,它工作得很好,但是当我直接登录时,我将重定向到以下网址:

  

http://localhost:4200/null

我希望根路径http://localhost:4200符合预期的行为。

我检查了repo of the tutorial以确认我的代码,但没有发现任何特殊之处。也许您有什么投入可以解决这个问题?

在我的代码下面:

auth.service.ts

export class AuthService {

  / ... /

handleAuth() {
  // When Auth0 hash parsed, get profile
  this.auth0.parseHash((err, authResult) => {
    if (authResult && authResult.accessToken) {
      window.location.hash = '';
      this.getProfile(authResult);
    } else if (err) {
      this.clearRedirect();
      this.router.navigate(['/']);
      console.error(`Error authenticating: ${err.error}`);
    }
  });
}

private getProfile(authResult) {
  this.loggingIn = true;
  // Use access token to retrieve user's profile and set session
  this.auth0.client.userInfo(authResult.accessToken, (err, profile) => {
    if (profile) {
      this.setSession(authResult, profile);
      this.redirect();
    } else if (err) {
      console.warn(`Error retrieving profile: ${err.error}`);
    }
  });
}

private redirect() {
  const redirect = decodeURI(localStorage.getItem('authRedirect'));
  const navArr = [redirect || '/'];

  this.router.navigate(navArr);
  // Redirection completed; clear redirect from storage
  this.clearRedirect();

}

据我对本教程的理解,第const navArr = [redirect || '/'];行应导航到存储的重定向URL或主页。但就我而言,当我直接登录而不是首页时,它重定向到http://localhost:4200/null

预先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

问题在于您的本地存储对象authRedirect可以为空,因此用户可以重定向到http://localhost:4200/null

您应检查该值是否为null,并在该页面上将用户重定向到首页(/)。

 private _redirect() {
    var redirect = localStorage.getItem('authRedirect') && decodeURI(localStorage.getItem('authRedirect'));


    if (!redirect || redirect == null)
    {
      //redirect is null so set route to homepage
      redirect = "/";
    }

    const navArr = [redirect || '/'];
    this.router.navigate(navArr);
    // Redirection completed; clear redirect from storage
    this._clearRedirect();
  }

答案 1 :(得分:-1)

我找到了一种解决方法,但问题并未得到真正解决:

net:
    http:
        enabled: true
        JSONPEnabled: true
        RESTInterfaceEnabled: true