Как я могу присвоить свой идентификатор входа члену, чтобы показать классы, для которых у него есть книга? - PullRequest
0 голосов
/ 07 апреля 2020

В настоящее время я застрял при попытке назначить свой идентификатор входа для участника в. net core. В настоящее время я использую SQLite для разработки. У меня есть модель пользователя (которая используется при входе в систему), а затем модель участника (используется для хранения информации об этом пользователе). Я надеюсь назначить логин участнику, поэтому, когда он записывается в класс, он может видеть, в какие классы он записался. однако у меня возникла проблема с назначением имени пользователя для входа.

Любая помощь будет принята с благодарностью.

Приведенный ниже код является моей моделью пользователя.

    public enum Role { Admin, Manager, Guest }

    public class User
    {
        public int Id { get; set; }

        public string Username { get; set; }
        public string Password { get; set; }
        public Role Role { get; set; }
    }
}

Код ниже - моя модель участника.

public enum Belt { White, Yellow, Green , Purple, Orange, Blue, Brown, Red, Black}
    public class Member
    {

        public int Id { get; set; }

        [Display(Name = "Name")]
        [Required]
        public string Name { get; set; }

        [Required]
        [Display(Name = "Date Of Birth")]
        [DataType(DataType.Date)]

        public User UserId { get; set; }

        //removed other details as too long

    }

Мой метод входа в систему в контроллере входа:

        public IActionResult Login()
        {
            return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Login([Bind("Username,Password")] User m)
        {
            if (!ModelState.IsValid)
            {
                return View(m);
            }

            var user = _svc.Authenticate(m.Username, m.Password);
            if (user == null)
            {
                ModelState.AddModelError("Username", "Invalid Login Credentials");
                ModelState.AddModelError("Password", "Invalid Login Credentials");
                return View(m);
            }

            var principal = BuildPrincipal(user);
            // check user can login
            await HttpContext.SignInAsync(
                CookieAuthenticationDefaults.AuthenticationScheme,
                principal
            );

            return Redirect("/");

        }

Извините, если этот вопрос уже был задан или его еще нет меня спросили соответствующим образом, я все еще новичок.

1 Ответ

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

После проверки подлинности ie с использованием HttpContext.SignInAsync вы всегда можете получить утверждения пользователя для входа в систему из Http Context в контроллере, например:

User.Claims.Where(x=>x.Type==ClaimTypes.NameIdentifier).FirstOrDefault().Value

Заявки получены от BuildPrincipal где вы положили претензии. Затем вы можете получить претензии и установить свойства Участника или Пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...