Что касается вашего последнего кода, я думаю, это то, что вы хотите сделать:
Если API возвращает статус 200, тогда вы хотите вызвать "this.authService.login();
", иначе "this.dualLoginRedirect();
"
[Согласно вашему коду на момент написания этого ответа - ваш метод isAuthorized()
не возвращает логическое значение, а возвращает неопределенное.Он должен возвращать логическое или наблюдаемое логическое или обещание.Я предполагаю, что в случае статуса 200, он вернет true
в противном случае он вернет false
].При таком допущении вы можете использовать только метод canActive()
, подобный следующему:
canActive(): Observable<boolean> {
return this.http.get<{}>('API CALL', {
withCredentials: true,
observe: 'response'
})
.pipe(
map(res => {
if(res.status === 200) {
//OR DO here whaterevr you want to do
this.authService.login();
//return true will render the associated component
//i.e. pass the guard
return true;
} else {
this.dualLoginRedirect();
//return false will fail the guard.
return false;
}
})
);
}
Ваша служба охраны автоматически подпишет на возвращаемую наблюдаемую метод canActivate()
.
Также обратите внимание, что в этом подходе нет членов класса, которые объявлены.Хотя, если это нужно вашим охранникам, просто объявите их и используйте в соответствии с вашими требованиями.