微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Okta 注销在 Angular Applicaiton 中不起作用

如何解决Okta 注销在 Angular Applicaiton 中不起作用

我将 OKTA SDK 用于 enter link description here 之后的角度

本文档。我还使用 OktaCallbackComponent 和 OktaAuthService 进行身份验证。 我可以成功登录。成功登录后,OKTA 将我重定向到 OktaCallbackComponent,他们将一些密钥存储在 localstroge 中,最后,我导航到我的主页。

现在当我点击应用程序的注销按钮时,它不起作用。正如我所见,页面加载并立即导航到回调组件并再次导航到主页。而我希望登录页面应该出现在用户面前。

这是我的注销功能

  async logout(){
   this.oktaAuth.tokenManager.clear()
   await this.oktaAuth.signOut();
   this.router.navigate(['/login']);
   this.toastr.success('logout Successfully','See you next time',{timeOut: 5000});
  }

谁能帮我解决可能的问题。

  {
    path: 'main',component: OpDataTableComponent,canActivate: [ OktaAuthGuard ],data: {
      title: 'Main Page'
    }
  },{
    path: CALLBACK_PATH,component: OktaCallbackComponent,// Later: Add a component
  },{
    path: 'login',// component: LoginComponent,component:OktaLoginComponent,canActivate: [checkAfterLoginService],data: {
      title: 'Login Page'
    }
  }

CheckAfterLoginService

export class checkAfterLoginService {
  constructor(private oktaAuth: OktaAuthService,private tokenService: TokenService,private router: Router) { }

  canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
    if(this.oktaAuth.isAuthenticated())
    {
      return this.router.navigateByUrl('/main');
    }else
    {
      return false;
    }
  }
}

Okta 配置。

const ISSUER = 'https://...../oauth2/default';
const HOST = window.location.host;
const REDIRECT_URI = 'https://..../callback';
const ScopES = 'openid profile email';

const config = {
  issuer: ISSUER,clientId: '.....',redirectUri: REDIRECT_URI,scopes: ScopES.split(/\s+/)
};

P.s 添加到应用程序设置的注销 URL 是 https://../login 路由。 我该如何解决这个问题或者可能是什么问题?非常感谢您的帮助。

解决方法

尝试将您的 logout() 方法更改为如下所示:

async logout(){
  await this.oktaAuth.signOut();
  this.router.navigate(['/login']);
  this.toastr.success('Logout Successfully','See you next time',{timeOut: 5000});
}

您当前正在手动清除令牌,这使我们的底层 Auth JS SDK 认为您已注销。 this.oktaAuth.signOut() 应该为您清理令牌。如果您仍想手动清除它们,请确保在 signOut() 之后进行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。