Okta 注销在 Angular 应用程序中不起作用
Okta signout don't work in Angular Applicaiton
我在 enter link description here
之后的 angular 使用 OKTA SDK
此文档。我还使用 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 logout 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()
.
之后执行
我在 enter link description here
之后的 angular 使用 OKTA SDK此文档。我还使用 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 logout 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()
.