Angular 在存储中找不到ng oidc客户端用户
我已更新了所有角度相关性,包括ng oidc client(~2.0.3)和oidc client(^1.10.1),但更新后,我无法登录到我的应用程序,因为存在无限重定向 在控制台中,我收到以下错误:Angular 在存储中找不到ng oidc客户端用户,angular,openid-connect,Angular,Openid Connect,我已更新了所有角度相关性,包括ng oidc client(~2.0.3)和oidc client(^1.10.1),但更新后,我无法登录到我的应用程序,因为存在无限重定向 在控制台中,我收到以下错误: UserManager.getUser: user not found in storage UserManager.signinRedirectCallback: successful, signed in sub: auth0|auth0|5cac7184cf805a119895edc6
UserManager.getUser: user not found in storage
UserManager.signinRedirectCallback: successful, signed in sub: auth0|auth0|5cac7184cf805a119895edc6
我找不到一个原因,为什么这是不工作后更新了
我还将静态HTML页面替换为文档中的最新页面:
oidc登录重定向callback.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Callback</title>
<link rel="icon" type="image/x-icon" href="favicon.png" />
<script src="oidc-client.min.js" type="application/javascript"></script>
</head>
<body>
<script>
var Oidc = window.Oidc;
var config = {
userStore: new Oidc.WebStorageStateStore({ store: window.localStorage }),
};
if (Oidc && Oidc.Log && Oidc.Log.logger) {
Oidc.Log.logger = console;
}
var isPopupCallback = JSON.parse(window.localStorage.getItem('ngoidc:isPopupCallback'));
if (isPopupCallback) {
new Oidc.UserManager(config).signinPopupCallback();
} else {
new Oidc.UserManager(config).signinRedirectCallback().then((t) => {
window.location.href = '/';
});
}
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Renew Callback</title>
<link rel="icon" type="image/x-icon" href="favicon.png" />
</head>
<body>
<script src="oidc-client.min.js"></script>
<script>
var config = {
userStore: new Oidc.WebStorageStateStore({ store: window.localStorage }),
};
new Oidc.UserManager(config).signinSilentCallback().catch(function (e) {
console.error(e);
});
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Signout Callback</title>
<link rel="icon" type="image/x-icon" href="favicon.png" />
<script src="oidc-client.min.js" type="application/javascript"></script>
</head>
<body>
<script>
var Oidc = window.Oidc;
var config = {
userStore: new Oidc.WebStorageStateStore({ store: window.localStorage }),
};
if (Oidc && Oidc.Log && Oidc.Log.logger) {
Oidc.Log.logger = console;
}
var isPopupCallback = JSON.parse(window.localStorage.getItem('ngoidc:isPopupCallback'));
if (isPopupCallback) {
new Oidc.UserManager(config).signoutPopupCallback();
} else {
new Oidc.UserManager(config).signoutRedirectCallback().then((test) => {
window.location.href = '/';
});
}
</script>
</body>
</html>
我也在使用和以前一样的拦截器:
intercept(
req: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
return this.authService.identity$.pipe(
take(1),
switchMap(user => {
if (user && !user.expired && user.access_token) {
req = req.clone({
setHeaders: {
Authorization: `Bearer ${user.access_token}`,
},
});
} else {
this.authService.signinRedirect();
}
return next.handle(req);
})
);
}
}
拦截(
请求:HttpRequest,
下一步:HttpHandler
):可见{
返回此.authService.identity$.pipe(
以(1)为例,
开关映射(用户=>{
if(user&&!user.expired&&user.access\u令牌){
req=req.clone({
集合标题:{
授权:`Bearer${user.access\u token}`,
},
});
}否则{
this.authService.SignInDirect();
}
返回next.handle(req);
})
);
}
}
同样的守卫:
@Injectable()
export class CanActivateAuthGuard implements CanActivate {
constructor(private authService: AuthService) {}
public canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> | boolean {
return this.authService.loggedIn$.pipe(take(1));
}
}
@Injectable()
导出类CanActivateAuthGuard实现CanActivate{
构造函数(私有authService:authService){}
公共活动(
路由:ActivatedRouteSnapshot,
状态:RouterStateSnapshot
):可观察的|布尔值{
返回这个.authService.loggedIn$.pipe(取(1));
}
}
我应该怎么做才能修复UserManager.getUser错误并删除无限重定向到oidc logout redirect callback.html?在应用程序中在哪里调用getUser?在哪里可以解决这个问题?我使用了
userStore:(()=>新的WebStorageStateStore({store:window.localStorage}))如有
并将oidc客户端降级为^1.8.2
@Injectable()
export class CanActivateAuthGuard implements CanActivate {
constructor(private authService: AuthService) {}
public canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> | boolean {
return this.authService.loggedIn$.pipe(take(1));
}
}