У меня проблемы с включением внедрения зависимостей для моего AuthorizerService. Очевидно, что dep-inj не готов, пока «Аурелия» не «запустится», но я не знал, как получить к нему доступ.
main.js:
aurelia.container.registerInstance(HttpClient, http.c());
// set your interceptors to take cookie data and put into header
return aurelia.start().then(() => {
let Authorizer = new AuthorizerService();
aurelia.container.registerInstance(AuthorizerService, Authorization);
console.log('Current State: %o', Authorizer.auth);
Authorizer.checkCookieAndPingServer().then(() => { console.log('Current State: %o', Authorizer.auth); aurelia.setRoot(PLATFORM.moduleName('app')); }, () => { aurelia.setRoot(PLATFORM.moduleName('login-redirect')); });
});
Теперь проблема в том, что если я делаю "new AuthorizerService ()", то "this.http.fetch ()" не будет доступен в AuthorizerService.js.
Должен ли я передать "http.c ()" (который доставляет экземпляр HttpClient) в качестве параметра внутри:
checkCookieAndPingServer(http.c())
или есть другой способ?
Могу ли я удалить «новый AuthorizerService ()» и просто сделать (я сделал это):
aurelia.container.getInstance(AuthorizerService);
Каким-то образом заставить его выполнить внедрение зависимостей и получить "зарегистрированный экземпляр" функции http.c () "?
Я не могу просто проверить куки. Я должен пинговать сервер для безопасности, и сервер установит куки.
Я думаю, что все это неправильно, потому что мне нужен глобальный параметр, который по умолчанию имеет значение false, а затем выполняет запрос к внутреннему серверу и устанавливает соответствующим образом Root. Возможно, только запросить бэкэнд на «странице входа»? Хорошо, но тогда мне нужно будет сделать "setRoot (backtoApp); aurelia.AlsoSetLoggedIn (true);" внутри логин модуля. Но когда я устанавливаю Root (backtoApp), он просто начинается заново.
Другими словами, когда setRoot (логин); затем setRoot (backToApp); <- тогда экземпляр AuthorizerService не имеет своего правильного набора данных (например, loggedIn = true). </p>
РЕДАКТИРОВАТЬ: Лучшее решение может быть:
main.js:
return aurelia.start().then(() => {
let Authorizer = aurelia.container.get(AuthorizerService);
let root = Authorizer.isAuthenticated() ? PLATFORM.moduleName('app') : PLATFORM.moduleName('login');
console.log('Current State: %o', Authorizer.auth);
aurelia.setRoot(root);
});
Authorizer.js
constructor(http) {
this.http = http;
this.auth = {
isAuthenticated: false,
user: {}
}
}
"this.auth" больше не является статичным. Больше не "static auth = {isAuthenticated: false}", который был примером кода, который я нашел.
Так что теперь «auth» устанавливается внутри модуля «login». Но это означает, что модуль входа в систему отображается каждый раз, когда приложение загружается на короткое время, а затем перенаправляется обратно в «setRoot (backToApp)»