类型不存在属性。怎么了

时间:2019-11-29 19:21:41

标签: javascript asp.net angular typescript asp.net-mvc-3

我在这里发布,希望你们中的一个可以帮助我。我只有很少的编程知识,所以我被要求在Angular和ASP.NET Core MVC 3中建立一个简单的电子商务网站。因此,以下代码应该不会使用户注销:登录但尝试通过url访问管理员页面。这是我的教授告诉我们使用的一些代码,但由于某种原因,它对我不起作用。他使用的是Angular的旧版本,因此,例如,在他使用.map()的情况下,我必须使用.pipe(map()),在他使用response.json()。role的地方,我只做了response.role。我的IDE向我显示了关于client.logenticated和response.role的客户端登录方法中的以下错误

  

“ boolean”类型上不存在“已验证”(或“ role”)属性。

我怀疑问题出在客户端登录方法上返回多个参数,或者是由.pipe(map())引起的。老实说,我在这里一无所知。我将不胜感激

登录:

login(): Observable<any> {
    this.authenticated = false;
    return this.repo.login(this.name, this.password).pipe(
        map(response => {           
            if (response.authenticated == 'true') {
                this.authenticated = true;
                this.password = null;
                this.role = response.role;

                if (this.role == 'Administrator') {
                   this.router.navigateByUrl("/admin/overview");
                    this.admin = true;
                }
                else {
                    this.router.navigateByUrl("/");
                }
            }                
            return this.authenticated;
        }),
        catchError(e => {
            this.authenticated = false;
            return of(false);
        })
    );
}

服务器端登录:

 [HttpPost("/api/account/login")]
        public async Task<IActionResult> Login([FromBody] LoginViewModel creds) {
            if (ModelState.IsValid && await DoLogin(creds)) {
                IdentityUser user = await userManager.FindByNameAsync(creds.Name);

                if (await userManager.IsInRoleAsync(user, "Administrator"))

                    return Ok(new { authenticated = "true", role = "Administrator"} );
                else
                    return Ok( new { authenticated = "true", role = "NoAdministrator" }); 
            }
            return BadRequest();
        }

1 个答案:

答案 0 :(得分:0)

错误非常清楚。 response不是访问其成员(验证)的对象。

这将返回布尔值:

this.repo.login(this.name, this.password);

将您的条件更改为:

response == 'true'

OR

根据您的后端,响应是一个对象。将this.repo.login的返回类型更改为任意。