角度多重认证方案

问题描述

@H_502_0@我们希望在Angular应用程序中支持两种身份验证方案:

  • oauth2,针对远程IDP
  • 密码验证,针对自己的服务器 验证模式应在构建时选择。
@H_502_0@我定义了两个模块:iaauth和otdsauth(使用angular-oauth2-oidc),并有条件地将其导入app.module.ts

environment.authMechanism === 'password' ? IaAuthenticationModule.forRoot({}) : OTDSAuthModule.forRoot(),
@H_502_0@并使用useFactory声明了抽象服务:

@Injectable({
  providedIn: 'root',useFactory: (http: HttpClient,router: Router,logger: NGXLogger) : any => {
      return new IaAuthService(http,router,logger)
  }
})
@H_502_0@导出抽象类AuthService { ... }

@H_502_0@但是由于某种原因我得到了

Uncaught ReferenceError: Cannot access 'AuthService' before initialization
at Module.AuthService (auth.service.ts:3)
at Module../src/ia-auth/ia-auth.service.ts (ia-auth.service.ts:13)
at __webpack_require__ (bootstrap:84)
at Module../src/app/auth.service.ts (auth.service.ts:3)
@H_502_0@启动应用程序时。我还会收到循环依赖项的警告(在堆栈跟踪中也可见)。

@H_502_0@ IaAuthService的定义如下:

export class IaAuthService extends AuthService {
  constructor(
    private http: HttpClient,private router: Router,private log: NGXLogger) {
  super()
  
}
  • 这是实现选择性身份验证的正确方法吗? (模式是在构建期间设置的)
  • 避免抽象服务循环依赖的正确方法是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)