сохранение идентификатора пользователя

#c# #api #owin-middleware

#c# #API #owin-промежуточное программное обеспечение

Вопрос:

я пытаюсь сохранить

  HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new GenericIdentity(user.UserName), new string[] { /* fill roles if any */ });
                string f = HttpContext.Current.User.Identity.Name;
  

// здесь он успешно показывает имя пользователя в методе входа в систему, но когда я попытаюсь позже другим способом получить user.identity.name это возвращаемое значение null я опубликую свой метод входа в систему я использовал owin identity
и после входа в систему он всегда не аутентифицирован или авторизован

     public async Task<IHttpActionResult> Login(LoginViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest();
        }

        try
        {
            var result = await SignInManager.PasswordSignInAsync(model.username, model.Password, isPersistent: true, shouldLockout: false);
            var user = await UserManager.FindByNameAsync(model.username);
            AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
            AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = true },
              await user.GenerateUserIdentityAsync(UserManager));
         
            if (result == SignInStatus.Success amp;amp; user != null)
            {
                int temp_loginTimes = user.login_times;
                temp_loginTimes  ;
                user.login_times = temp_loginTimes;
                user.last_login = Convert.ToDateTime(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture));
                user.ip = model.ip;
                user.device_type = model.device_type;
                var res = await UserManager.UpdateAsync(user);
                HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new GenericIdentity(user.UserName), new string[] { /* fill roles if any */ });
              

                string f = HttpContext.Current.User.Identity.Name;
                FormsAuthentication.SetAuthCookie(model.username, true);
                if (res.Succeeded == true)
                {
                    LoginHistoryBLL loginHistory = new LoginHistoryBLL();
                    var rese = loginHistory.SaveLogInDetails(new LoginHistoryDTO() { username = user.UserName, logindate = (DateTime)user.last_login, creater = user.creater, type = user.type, device = model.device_type, ip = model.ip });
UserDTO userDTO = new UserDTO();
                    if (rese.ok == true) {
                        userDTO.username = user.UserName;
                        userDTO.creater = user.creater;
                        userDTO.login_times = user.login_times;
                        userDTO .balance = user.balance;
                        userDTO.password= user.PasswordHash;
                        userDTO.type = user.type;
                        userDTO.bonus = user.bonus;
                        userDTO.balance_in = user.balance_in;
                        userDTO.balance_out = user.balance_out;
                        userDTO.device_type = user.device_type;
                        userDTO.status = user.status;
                        userDTO.percantageOfLuck = user.percantageOfLuck;
                        userDTO.double_bunos_active = user.double_bunos_active;
                        userDTO.level = user.level;



 string gf = User.Identity.Name; //until here work everything fine
                        return Ok(userDTO);
                    }
                    else
                        return BadRequest("user not saved in history");

                }
                else
                {
                    return BadRequest("user not updated");
                }
            }
            else
            {
                return BadRequest("user not assign");
            }


        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message);

        }

    }
  

но, например: в этом методе я ничего не получаю

     // POST api/Account/getuserwithcreater
    [Route("getuserwithcreater")]
    [HttpGet]
    public async Task<IHttpActionResult> GetUsersAsync()
    {
        using (var context = new ApplicationDbContext())
        {
            ApplicationUser curuser = await UserManager.FindByIdAsync(User.Identity.GetUserId());
            List<UserDTO> us = new List<UserDTO>();
            
            foreach (var item in UserManager.Users)
            {
                if (item.creater == User.Identity.Name)
                {
                    UserDTO userDTO = new UserDTO(); ;
                    userDTO.username = item.UserName;
                    userDTO.creater = item.creater;
                    userDTO.login_times = item.login_times;
                    userDTO.balance = item.balance;
                    userDTO.password = item.PasswordHash;
                    userDTO.type = item.type;
                    userDTO.bonus = item.bonus;
                    userDTO.balance_in = item.balance_in;
                    userDTO.balance_out = item.balance_out;
                    userDTO.device_type = item.device_type;
                    userDTO.status = item.status;
                    userDTO.percantageOfLuck = item.percantageOfLuck;
                    userDTO.double_bunos_active = item.double_bunos_active;
                    userDTO.level = item.level;
                    us.Add(userDTO);
                }
            }


            return Ok(us);
        }
    }
  

Комментарии:

1. Похоже, у вас есть конечная точка входа в систему, вы должны выполнять эту аутентификацию в конвейере owin в качестве самого промежуточного ПО аутентификации и использовать ClaimsIdentity

2. на самом деле я не знаком с identity, пожалуйста, не могли бы вы подробнее объяснить, пожалуйста