Подтвердить что ты не робот

Получить UserID зарегистрированного пользователя в Asp.Net MVC 5

Я относительно новичок в ASP.Net MVC и теперь пытаюсь использовать встроенную функцию входа пользователя. Я могу зарегистрировать пользователя в окне регистрации. Если я попытаюсь войти в систему с созданным пользователем, это также будет работать. Я перенаправлен на главную страницу.

Но я не могу получить UserID текущего пользователя. Я пробовал свой код в HomeController и AccountController, но оба они не работали. Оператор в первой строке всегда возвращает null.

var userID = User.Identity.GetUserId();

if (!string.IsNullOrEmpty(userID))
{
    var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(ApplicationDbContext.Create()));
    var currentUser = manager.FindById(User.Identity.GetUserId());
}

Нужно ли мне что-то еще перед получением UserID?

4b9b3361

Ответ 1

Ответ прямо в вашем коде. Что это значит?

var userID = User.Identity.GetUserId();

Если вы используете идентификатор ASP.NET, тогда после входа (и перенаправления на другую страницу), IPrincipal.IIdentity должен быть ClaimsIdentity. Вы можете попробовать следующее:

var claimsIdentity = User.Identity as ClaimsIdentity;
if (claimsIdentity != null)
{
    // the principal identity is a claims identity.
    // now we need to find the NameIdentifier claim
    var userIdClaim = claimsIdentity.Claims
        .FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier);

    if (userIdClaim != null)
    {
        var userIdValue = userIdClaim.Value;
    }
}

Вышеупомянутый блок кода не совсем, но по существу, что делает метод расширения IIdentity.GetUserId.

Если ни одно из этих действий не работает, пользователь, возможно, еще не зашел на ваш сайт. После входа в систему вам необходимо перенаправить на другую страницу, прежде чем сервер будет записывать cookie аутентификации в браузер. Этот файл cookie должен быть записан до того, как User.Identity получит всю эту информацию (включая NameIdentifier) для последующих запросов.