PasswordSignInAsync и CreateAsync без Entity Framework

SignInManager.PasswordSignInAsync проверяет наличие пользователя в базе данных и входит в систему. await UserManager.CreateAsync создает нового пользователя в базе данных. await SignInManager.SignInAsync подписывает пользователя.

Поправьте меня, если я ошибаюсь, но это тривиально для этого вопроса. Как реализовать эти функции, если мы не используем Entity Framework в ASP.NET MVC?

Планируете ли вы использовать схему членства в удостоверении aspnet или пользовательскую проверку подлинности и авторизацию? Зависит от этого. Те методы из коробки поверх схемы, иначе нужно иметь информацию как авторизоваться

Pranav Singh 13.02.2019 06:57

@PranavSingh прав: вопрос в том, что вы хотите авторизовать?

schlonzo 13.02.2019 07:34

@PranavSingh Я использую не пользовательскую аутентификацию, а идентификацию asp.net, которая по умолчанию используется в примере приложения.

xyz 13.02.2019 07:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
1 010
2

Ответы 2

Вам не нужно реализовывать этот метод, даже если вы не используете EF

Вы можете полагаться на удостоверение asp.net, зарегистрировав пользовательский класс в IUserStore и вызывая их для использования собственного доступа к базе данных.

Я следил за этой статьей, и членство работает даже с моим собственным письменным уровнем доступа к данным:

https://markjohnson.io/articles/asp-net-core-identity-without-entity-framework/

В основном вы должны:

  1. напишите свой доступ к БД (конечно)
  2. создать модель для пользователя (и для роли и т. д.)
  3. создать UserStore, который реализует IUserStore, обрабатывая методы YourCustomModel
  4. добавить UserStore в качестве службы в автозагрузку приложения

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

    private readonly UserManager<YourCustomModel> _userManager;
    private readonly SignInManager<YourCustomModel> _signInManager;

    public YourCustomController(
        UserManager<YourCustomModel> userManager,
        SignInManager<YourCustomModel> signInManager
        )
    {
        _userManager = userManager;
        _signInManager = signInManager;
    }

и в своих действиях используйте их для вызова методов идентификации:

    var uModel = YourCustomModel.Static.SelectByEmail(vModel.Email);

    var result = await _signInManager.PasswordSignInAsync(uModel, vModel.Password,
                                  vModel.RememberMe, lockoutOnFailure: false);
    if (result.Succeeded) ...

Вместо этого используйте метод SignInAsync и создайте пользовательский объект в памяти.

var userPrincipal = await _signInManager.CreateUserPrincipalAsync(new 
   ApplicationUser
           {
                  Id = 1,
                  UserName = viewModel.UserName,
                  Email = viewModel.UserName,
                  SecurityStamp = Guid.NewGuid().ToString()
           });
     foreach(var claim in userPrincipal.Claims)
     {
            appUser.Claims.Add(new ApplicationUserClaim { UserId = appUser.Id, 
            ClaimType = claim.Type, ClaimValue = claim.Value });
     }
     await _signInManager.SignInAsync(appUser, viewModel.RememberMe);

Другие вопросы по теме