Управление состоянием аутентификации пользователя при ручной навигации по 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: "" });
Другие вопросы по тегам