Почему пользователь нулевой

Я хотел бы спросить, почему UserId имеет значение null (в приведенном ниже коде) после входа пользователя в систему.

OR

Мне нужно перенаправить пользователей в зависимости от их ролей. Мне нужно сделать это максимально простым.

// POST: /Account/Login
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        // This doesn't count login failures towards account lockout
        // To enable password failures to trigger account lockout, change to shouldLockout: true
        var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
        switch (result)
        {
            case SignInStatus.Success:
                string UserId = User.Identity.GetUserId(); <------ HERE
                HelpRoles hr = new HelpRoles();
                returnUrl = hr.CheckUserRoleAndRedirect(UserId);
                return RedirectToLocal(returnUrl);

person Paweł Janicki    schedule 28.04.2016    source источник


Ответы (2)


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

Для получения дополнительной информации см. .

Чтобы обойти это, в случае успеха вы можете получить пользователя из БД, используя адрес электронной почты, и вместо этого использовать идентификатор.

person John Mc    schedule 28.04.2016

Как сказал Джон Мак, чтобы обойти это, вам нужно получить пользователя в случае успеха. Таким образом, вы можете захотеть что-то подобное, прежде чем получать UserId

var user = userManager.Find(model.UserName, model.Password);

or

var user = userManager.FindByEmail(model.Email);

or

var user = userManager.FindByName(model.Username);

ИЗМЕНИТЬ

В этом случае вам не придется использовать ваш метод, как показано ниже string UserId = User.Identity.GetUserId(); ‹------ ЗДЕСЬ

потому что, как только вы получите user object, вы можете получить в нем поле id, например user.Id

person jamiedanq    schedule 28.04.2016