Это мой код, в котором я получаю ошибку:
Код: Выделить всё
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[HttpPost("BookDoctor")]
public async Task BookDoctor(PatientAppointmentDto model)
{
try
{
if (!ModelState.IsValid)
{
return BadRequest();
}
var isAvailable =await appoinmentService.CheckAvailability(model.DoctorId, model.Date, model.TimeStart);
if (!isAvailable)
{
return BadRequest("Doctor not available");
}
model.TimeEnd = model.TimeStart.AddMinutes(30);
var currentUser = User.FindFirst(ClaimTypes.NameIdentifier).Value;
await appoinmentService.AddAsync(model.Info,
model.Date, model.TimeStart, model.TimeEnd,
model.DoctorId, currentUser.ToString());
return Ok(model.Id);
}
catch(Exception ex)
{
return BadRequest(ex.Message);
}
}
Это мой метод создания токена:
Код: Выделить всё
private async Task CreateJwtToken(ApplicationUser user)
{
var userClaims = await _userManager.GetClaimsAsync(user);
var roles = await _userManager.GetRolesAsync(user);
var roleClaims = new List();
foreach (var role in roles)
roleClaims.Add(new Claim("roles", role));
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, user.Name),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(JwtRegisteredClaimNames.Email, user.Email),
new Claim(ClaimTypes.NameIdentifier, user.Id) // User ID
}
.Union(userClaims)
.Union(roleClaims);
var Key = _IConfiguration["JWT:key"];
var issuer = _IConfiguration["JWT:issuer"];
var audience = _IConfiguration["JWT:Audience"];
var dur = _IConfiguration["JWT:DurationInDays"];
var symmetricSecurityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Key));
var signingCredentials = new SigningCredentials(symmetricSecurityKey, SecurityAlgorithms.HmacSha256);
var jwtSecurityToken = new JwtSecurityToken(
issuer: issuer,
audience: audience,
claims: claims,
expires: DateTime.Now.AddDays(double.Parse(dur)),
signingCredentials: signingCredentials);
}
Код: Выделить всё
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(option =>
{
option.RequireHttpsMetadata = false;
option.SaveToken = false;
option.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidIssuer = builder.Configuration["JWT:Issuer"],
ValidAudience = builder.Configuration["JWT:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["JWT:Key"]))
};
});
return jwtSecurityToken;
}
Код: Выделить всё
var currentUser = User.FindFirst(ClaimTypes.NameIdentifier).Value;
Подробнее здесь: https://stackoverflow.com/questions/792 ... -null-here