Управление состоянием аутентификации пользователя при ручной навигации по URL
Я использую Angular2 с ASP.NET Core MVC, и управление ручной URL-навигацией работает нормально, сервер успешно загружает мой Home view с Angular2.
При аутентификации пользователя я устанавливаю переменную сеанса следующим образом:
HttpHelper.HttpContext.Session.SetString("isLoggedIn", true.ToString() );
Я хочу, чтобы после того, как пользователь в приложении, если он хочет загрузить определенный маршрут, вручную перейдя к нему, я хочу, чтобы моя служба вызывала мой ASP-контроллер, чтобы проверить, прошел ли пользователь проверку подлинности, так что моя защита позволяет маршрутизация. Вместо этого для защиты по умолчанию установлено значение false, и я, очевидно, перенаправлен на мою страницу входа.
Вот мой метод ASP Controller, который я хочу вызвать, чтобы обновить значение IsLoggedIn в моем auth.service:
[HttpGet]
public IActionResult IsConnectedState()
{
if (!String.IsNullOrWhiteSpace(HttpHelper.HttpContext.Session.GetString("isLoggedIn")))
return Ok(true);
else
return Ok(false);
}
так что моя AuthenticationGuard может вызывать AuthenticationService для обновления логического значения, управляющего состоянием аутентификации:
alert(this.authService.isLoggedIn);
if (!this.authService.isLoggedIn) {
this.authService.setupLoggedInState().subscribe(() => { });
}
с помощью следующего кода, обновляющего логическое значение в моем auth.service:
setupLoggedInState() {
alert("Setting Up");
// Setting up the Http call
let lControllerAction: string = "/IsConnectedState";
let lControllerFullURL: string = this.controllerURL + lControllerAction;
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
// Call my ASP Controller IsConnectedState() method
return this.http.get(lControllerFullURL, options)
.map((res: any) => {
// Réponse reçue du WebService
let data = res.json();
alert(data);
if (data == true) {
this.isLoggedIn = true;
}
}
).catch(this.handleError);
}
Когда я выполняю аутентификацию, а затем вручную перехожу на URL, мой охранник говорит мне, что логическое значение действительно установлено на "false", и я также получаю "Настройка", когда моя служба пытается вызвать http.get. Кажется, что ошибка в середине метода, потому что я никогда не получаю точку останова, которую я установил в моем контроллере ASP. Я получаю следующую ошибку, которую я не понимаю:
"platform-browser.umd.js:937 EXCEPTION: Error: Uncaught (in promise): TypeError: Cannot read property 'toString' of null"
Может быть потому, что я не вызываю службу в нужный момент в моей auth.guard? Все мои другие вызовы, такие как аутентификация, работают с http.post без каких-либо проблем, поэтому я не понимаю, откуда возникла проблема...
Любая помощь будет принята с благодарностью.
1 ответ
В Angular 2 RC5 есть известный дефект, который вызывает эту ошибку при get
и предоставить 'Content-Type': 'application/json'
заголовок.
Для временного решения проблемы добавьте пустую строку в body
недвижимость по вашему запросу варианты:
let options = new RequestOptions({ headers: headers, body: "" });