Я работал над переносом довольно большого приложения с ioni c 3 + cordova на ioni c 4 + конденсатор.
Мы используем IdentityServer4, поэтому я использую пакетный oid npm c -клиент для отображения всплывающего окна входа в систему. Однако вместо того, чтобы отображаться внутри приложения, как это было тогда, когда приложение было включено с помощью ioni c 3, теперь в браузере системы отображается страница входа в систему.
После прочтения всего исходного кода я понял, что пакет по умолчанию использует браузер приложения, а не системный браузер. Странно то, что я никогда не говорил InAppBrowser оставаться в системном режиме или никогда не настраивал параметры пакета для использования системного браузера ...
Вот код аутентификации. Я не автор, но я тестировал этот код на ioni c 3, и он отлично работал.
public startAuthentication() {
if (this.app.isApp()) {
this.manager.signinPopup().then((user) => {
this.setUserInfo(user);
}).catch((e) => {
console.log(e);
});
} else {
return this.manager.signinRedirect();
}
}
Вот мой файл AppModule
@NgModule({
declarations: [
AppComponent,
VideoChatComponent,
],
imports: [
CommonModule,
WorkOrderPageModule,
DemoPageModule,
BrowserModule,
AccuvPageModule,
AboutPageModule,
HomePageModule,
FormsModule,
IonicModule.forRoot(),
CoreModule,
// ReceiveMaterialsPageModule,
AppRoutingModule,
IonicStorageModule.forRoot(),
// IonicAudioModule.forRoot((audioProviderFactory)),
// PowerBIModule.forRoot(),
// // AudioNoteModule,
// SpeechToTextModule,
// LazyLoadImageModule,
// DailyFieldReportPageModule,
// DailyVehicleInspectionPageModule,
// WorkOrderCONModule,
// WorkOrderOFModule,
// DashboardPageModule,
// PoWorkflowApprovalsPageModule,
// VideoQaModule,
// WarehouseCheckInPageModule,
// ChatEnginePageModule
],
bootstrap: [AppComponent],
entryComponents: [
// AppComponent,
// MainComponent,
// HomePage,
// AboutPage,
// AccuvPage,
// WorkOrderPage,
// ReceiveMaterialsPage,
// DemoPage
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
providers: [
{provide: APP_BASE_HREF, useValue: '/'},
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
// IonicAudioModule,
HttpClient,
Diagnostic,
LocationAccuracy,
ScreenOrientation,
IonicStorageModule,
AppCenterAnalytics,
AndroidPermissions,
VideoCapturePlus,
LocalNotifications,
InAppBrowser,
// IonicModule
]
})
export class AppModule { }
Обратите внимание, что многие модули и сервисы комментируются, поскольку я постепенно интегрирую их в новое приложение.
Я попытался заменить метод startAuthentication на простой метод create () InAppBrowser на '_blank' цель, и она работала, как и ожидалось.
Мне было интересно, если кто-нибудь мог понять, почему, учитывая, что плагин работает и InAppBrowser кажется правильно введен, я бы увидел всплывающее окно в браузере системы.
Вот объект UserManagerSettings:
private _getClientSettings(): UserManagerSettings {
return {
authority: this.app.config.identityServerURL,
checkSessionInterval: 10000000,
client_id: this.app.config.clientId,
filterProtocolClaims: this.app.config.filterProtocolClaims,
iframeNavigator: new CordovaIFrameNavigator(),
loadUserInfo: this.app.config.loadUserInfo,
monitorSession: false,
popupNavigator: new CordovaPopupNavigator(),
post_logout_redirect_uri: this.app.config.postLogoutRedirectURI,
redirect_uri: this.app.config.redirectURI,
response_type: this.app.config.responseType,
scope: this.app.config.scope
};
}
}
Я также пытался явно установить popupWindowTarget в значение «_blank», но он не работал.
Спасибо, что прочитали мой вопрос:)