. net core 3.1 & проблема идентификации (заявка nameidentifier имеет идентификатор, который не соответствует ни одному пользователю, в то время как заявка правильна) - PullRequest
0 голосов
/ 01 апреля 2020

У меня возникла проблема в области моего веб-сайта, где мне нужно получить идентификатор пользователя. Я попытался использовать HttpContext.User и введенный IHttpContextAccessor, оба дают мне идентификатор, который 1) не совпадает пользователь и 2) даже не существуют в моей базе данных!

Я также пытался внедрить UserManager и вызывать GetUserId для него, и это тоже дает мне неправильный идентификатор (еще раз, без понятия откуда, это не так в базе данных). Вызов GetUserAsyn c для него возвращает ноль.

Я не использую ничего особенного и необычного, страницу по умолчанию, включенную в ядро ​​idendity для входа, просто контекст, который наследуется от IdentityDbContext, и часть входа работает просто хорошо, поскольку эти страницы находятся за тегом Authorize и вынуждают меня войти в систему. Если я получаю сообщение об ошибке, я могу копать, но я просто получаю Id, который, кажется, возник из ниоткуда и в недоумении где искать.

Вот как выглядят претензии при звонке

HttpContext.User.Claims.ToList()

[0]: {http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier: f478bf7a-1734-494c-aad6-0882ab24007f} <-- this id is not present in AspNetUsers table
[1]: {http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name: EDITED OUT FOR PRIVACY} <-- my correct username (my email)
[2]: {AspNet.Identity.SecurityStamp: EDITED OUT}
[3]: {http://schemas.microsoft.com/ws/2008/06/identity/claims/role: Administrator} <-- correctly finds my role too

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

У меня была проблема с использованием этого в ExternalLoginCallback:

var user = new SmileAppUser { UserName = email, Email = email };
await _signInManager.SignInAsync(user, isPersistent: false);

Попробуйте извлечь пользователя из базы данных, чтобы включить идентификатор в претензии с SignInAsyn c.

Можете ли вы показать нам свой логин или ExternalLogin код

0 голосов
/ 03 апреля 2020

Вы можете использовать следующий код для получения UserId

using System.Security.Claims;

using Microsoft.AspNetCore.Identity;


var claimsIdentity = (ClaimsIdentity)this.User.Identity;

var claim = claimsIdentity.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier);

var userId = claim.Value;

...