Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.Net核心Web API User.Identity.Name为空_.net_.net Core_Authorization_Jwt_Asp.net Core Webapi - Fatal编程技术网

.Net核心Web API User.Identity.Name为空

.Net核心Web API User.Identity.Name为空,.net,.net-core,authorization,jwt,asp.net-core-webapi,.net,.net Core,Authorization,Jwt,Asp.net Core Webapi,当前出现问题,我试图检索当前登录用户的名称。我的登录方法调用令牌管理器,该管理器构建令牌并添加适当的声明。见下文: [HttpPost] [Route("Login")] public async Task<IActionResult> Login([FromBody] TokenViewModel vm) { try { if (!Mode

当前出现问题,我试图检索当前登录用户的名称。我的登录方法调用令牌管理器,该管理器构建令牌并添加适当的声明。见下文:

        [HttpPost]
        [Route("Login")]
        public async Task<IActionResult> Login([FromBody] TokenViewModel vm)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return BadRequest();
                }

                var user = await _userManager.FindByEmailAsync(vm.Email);
                var isLoginRequestValid = await _userManager.CheckPasswordAsync(user, vm.Password);

                if (!isLoginRequestValid)
                {
                    return BadRequest("Username or password is incorrect");
                }

                return Ok(new TokenViewModel { Token = _tokenManager.BuildJwtToken(vm.Email) });
            }
            catch(Exception ex)
            {
                return BadRequest(ex);
            }
        }
我已经看过很多关于这个问题的帖子,但仍然没有找到解决方案。身份验证本身工作正常。此外,如果我检查User.Identity并在请求时检查它的声明,那么我能够看到一个声明,它的名称是电子邮件test@test.com在这种情况下,在它。请参阅下面的屏幕截图,其中显示了第一个声明是电子邮件声明,并且包含的值为test@test.com但是,我无法直接通过用户检索声明。标识:


为什么我的User.Identity.Name在这里仍然为空,尽管已成功添加声明?

看起来我需要添加声明:

新的索赔类型。名称,电子邮件

仅使用:

新索赔登记处索赔名称。电子邮件,电子邮件

没有联系到身份的要求


这是在我的BuildJwtTokenstring电子邮件方法中添加的。现在一切都连接好了。希望这对将来的其他人有所帮助

我只看到你在填写电子邮件地址声明。你应该填写姓名声明:是的,你没有看到那篇文章-这篇文章应该作为副本关闭
        public string BuildJwtToken(string email)
        {
            var claims = new[]
            {
                new Claim(JwtRegisteredClaimNames.Email, email),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
            };

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));

            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken(_config["Jwt:Issuer"],
                _config["Jwt:Audience"],
                claims,
                expires: DateTime.Now.AddMinutes(double.Parse(_config["Jwt:ExpireTime"])),
                signingCredentials: creds);

            return new JwtSecurityTokenHandler().WriteToken(token);
        }