我有这种生成令牌的方法:
[HttpPost("login")]
public async Task<IActionResult> login(UserForLoginDto userForLoginDto)
{
var userFromRepo = await _repo.Login(userForLoginDto.Username.ToLower(), userForLoginDto.Password);
if(userFromRepo == null)
return Unauthorized();
var claims = new[]
{
new Claim(ClaimTypes.NameIdentifier, userFromRepo.Id.ToString()),
new Claim(ClaimTypes.Name, userFromRepo.Username)
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config.GetSection("AppSettings:Token").Value));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = DateTime.Now.AddDays(1),
SigningCredentials = creds
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenDescriptor);
return Ok(new{
token = tokenHandler.WriteToken(token)
});
}
当我通过Postman调用此API时:
localhost:5000/api/auth/login
在身体用户名中:"约翰",密码:"密码"
我有一个错误:
处理请求时发生了一个未经治疗的例外。 参数Nullexception:字符串引用未设置为一个实例 细绳。参数名称:S System.Text.Encoding.getBytes(String s(
因为有这样的行:
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config.GetSection("AppSettings:Token").Value));
请帮助解决此错误。
对于此错误,_config.GetSection("AppSettings:Token").Value
似乎返回null。
对于_config.GetSection("AppSettings:Token")
,您需要确保您的appsettings.json
包含以下内容:
{
"AppSettings": {
"Token": "This is Token"
},
}
我有这个确切的错误,我正在使用VS代码。我通过设置称为" tokenkey"的环境变量来解决此问题。可以使用以下内容在终端设置:
dotnet user-secrets set "TokenKey" "super secret key" -p API/
我的代码下面的代码
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["TokenKey"]));
如果您在生产模式下遇到此错误,则必须在服务器上设置环境变量。
我遇到了同样的错误。我通过在我的启动设置中设置环境变量来解决此问题。只需确保它像下面的示例代码
一样"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"JWT_SECRET": "This is a secret or key for jwt",
"JWT_ISSUER": "Auth"
}
我遇到了同样的错误。我通过在我的启动设置中设置环境变量来解决此问题。JSON文件,您可以将其放置在AppSettings.json文件中,只需确保它像下面的示例代码
一样。{&quot" jwt":{&quot" key":&quot" -jadfgdfgdfgdfgdgdgdewsdg&quot&quot ,,"发行人":" ********。com.tr"},
解决此问题添加新项目 - &gt;选择appsetting.json,然后将其添加到API将AppSetting.development.json中的所有内容复制到AppSetting.json
解决的问题