Authentication 管理手动URL导航上的用户身份验证状态

Authentication 管理手动URL导航上的用户身份验证状态,authentication,angular,asp.net-core-mvc,angular2-routing,angular2-http,Authentication,Angular,Asp.net Core Mvc,Angular2 Routing,Angular2 Http,我将Angular2与ASP.NET核心MVC一起使用,并且管理手动URL导航工作正常,服务器正在成功地使用Angular2加载我的主视图 关于用户身份验证,我正在设置一个会话变量,如下所示: HttpHelper.HttpContext.Session.SetString("isLoggedIn", true.ToString() ); 我想要的是,在用户进入应用程序后,如果他想通过手动导航来加载特定路由,我希望我的服务调用我的ASP控制器来检查用户是否已通过身份验证,以便我的guard允许

我将Angular2与ASP.NET核心MVC一起使用,并且管理手动URL导航工作正常,服务器正在成功地使用Angular2加载我的主视图

关于用户身份验证,我正在设置一个会话变量,如下所示:

HttpHelper.HttpContext.Session.SetString("isLoggedIn", true.ToString() );
我想要的是,在用户进入应用程序后,如果他想通过手动导航来加载特定路由,我希望我的服务调用我的ASP控制器来检查用户是否已通过身份验证,以便我的guard允许路由。相反,防护默认设置为false,我显然会被重定向到我的登录页面

以下是我要调用的ASP控制器方法,以更新auth.service中的IsLoggedIn值:

[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(() => { });
}
使用以下代码更新my 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"
这可能是因为我没有在正确的时候在我的授权守卫中调用服务吗?我的所有其他调用(如身份验证)都与http.post一起工作,没有任何问题,因此我不知道问题出在哪里

非常感谢您的帮助。

Angular 2 RC5中有一个错误,当您执行
获取
并提供
'Content-Type':'application/json'
标题时,会导致此错误

对于临时解决方法,请在请求选项的
正文
属性中添加一个空字符串:

let options = new RequestOptions({ headers: headers, body: "" });

谢谢,这确实是问题所在。。。现在调用可以工作了,但我想已经太晚了,因为我在被重定向到登录名后进入ASP.Controller,这不是我想要的行为。无论如何,这是另一个问题。谢谢!