我在这里发布,希望你们中的一个可以帮助我。我只有很少的编程知识,所以我被要求在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();
}
答案 0 :(得分:0)
错误非常清楚。 response
不是访问其成员(验证)的对象。
这将返回布尔值:
this.repo.login(this.name, this.password);
将您的条件更改为:
response == 'true'
OR
根据您的后端,响应是一个对象。将this.repo.login
的返回类型更改为任意。