Идентификатор пользователя здесь становится нулевымC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Идентификатор пользователя здесь становится нулевым

Сообщение Anonymous »

Я пытаюсь получить идентификатор и использую токен jwt, но идентификатор равен нулю.
Это мой код, в котором я получаю ошибку:

Код: Выделить всё

[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);
}
А это моя программа.cs:

Код: Выделить всё

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;
Может ли кто-нибудь помочь мне с этим кодом? Я использую токен jwt для аутентификации, передавая шутку для использования этой конечной точки.

Подробнее здесь: https://stackoverflow.com/questions/792 ... -null-here
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»