如何在 angular 中重定向到身份服务器登录?
How to be redirected to identity server login in angular?
我希望在用户访问应用程序时立即重定向到身份服务器。在当前设置下,我有一个登录按钮,点击后可将用户重定向到 ID 服务器,但我想删除此按钮,以便在打开应用程序时发生。
这是我的 app.component.ts 文件
import { OidcSecurityService } from 'angular-auth-oidc-client';
export class AppComponent implements OnInit {
constructor(private ref: ChangeDetectorRef, public oidcSecurityService: OidcSecurityService) {
}
ngOnInit() {
this.oidcSecurityService
.checkAuth()
.subscribe((auth) => console.log('is authenticated', auth));
login() {
this.oidcSecurityService.authorize();
}
}
和对应的html
<div>
<button (click)="login()">Login</button>
</div>
从路由器导入 {Router}。在你的构造函数上设置它 router: Router
然后
this.oidcSecurityService.checkAuth().subscribe((auth) => router.navigateByUrl('Your URL');
您可以通过实施 CanActivate interface 在 auth guard 的帮助下解决您的问题。如果 canActivate returns false,则取消路由导航,我们可以使用它来授权我们的用户/将我们的用户重定向到登录页面。
每条需要经过身份验证的用户的路由都会在路由定义中的 canActivate 属性 中引用您的 auth guard。
{
path: 'admin',
component: AdminComponent,
canActivate: [AuthGuard]
}
授权守卫:
@Injectable({
providedIn: 'root',
})
export class AuthGuard implements CanActivate {
constructor(private oidcSecurityService: OidcSecurityService ) {}
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this.oidcSecurityService.checkAuth().pipe(
tap(isAuthenticated => {
if (!isAuthenticated) {
this.oidcSecurityService.authorize();
}
})
);
}
如果您需要更多帮助,请查看文档 here。尽管文档没有提供可观察对象的示例。
如果这对你来说是一个有效的选项,我个人建议切换到 angular-oauth2-oidc。 (https://www.npmjs.com/package/angular-oauth2-oidc)
然后您可以在 app.component.ts 中执行此操作:
this.oauthService.tryLogin().then((success: boolean) => {
if (!success) this.oauthService.initCodeFlow();
});
我希望在用户访问应用程序时立即重定向到身份服务器。在当前设置下,我有一个登录按钮,点击后可将用户重定向到 ID 服务器,但我想删除此按钮,以便在打开应用程序时发生。
这是我的 app.component.ts 文件
import { OidcSecurityService } from 'angular-auth-oidc-client';
export class AppComponent implements OnInit {
constructor(private ref: ChangeDetectorRef, public oidcSecurityService: OidcSecurityService) {
}
ngOnInit() {
this.oidcSecurityService
.checkAuth()
.subscribe((auth) => console.log('is authenticated', auth));
login() {
this.oidcSecurityService.authorize();
}
}
和对应的html
<div>
<button (click)="login()">Login</button>
</div>
从路由器导入 {Router}。在你的构造函数上设置它 router: Router
然后
this.oidcSecurityService.checkAuth().subscribe((auth) => router.navigateByUrl('Your URL');
您可以通过实施 CanActivate interface 在 auth guard 的帮助下解决您的问题。如果 canActivate returns false,则取消路由导航,我们可以使用它来授权我们的用户/将我们的用户重定向到登录页面。
每条需要经过身份验证的用户的路由都会在路由定义中的 canActivate 属性 中引用您的 auth guard。
{
path: 'admin',
component: AdminComponent,
canActivate: [AuthGuard]
}
授权守卫:
@Injectable({
providedIn: 'root',
})
export class AuthGuard implements CanActivate {
constructor(private oidcSecurityService: OidcSecurityService ) {}
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this.oidcSecurityService.checkAuth().pipe(
tap(isAuthenticated => {
if (!isAuthenticated) {
this.oidcSecurityService.authorize();
}
})
);
}
如果您需要更多帮助,请查看文档 here。尽管文档没有提供可观察对象的示例。
如果这对你来说是一个有效的选项,我个人建议切换到 angular-oauth2-oidc。 (https://www.npmjs.com/package/angular-oauth2-oidc)
然后您可以在 app.component.ts 中执行此操作:
this.oauthService.tryLogin().then((success: boolean) => {
if (!success) this.oauthService.initCodeFlow();
});