как избежать входа в систему без подтвержденного адреса электронной почты asp. net mvc - PullRequest
0 голосов
/ 01 апреля 2020

В данный момент в моем коде я пишу:

await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);

Пользователь вошел в систему даже без подтвержденного адреса электронной почты. Где мне нужно настроить диспетчер входа, чтобы запретить вход с непроверенной электронной почтой? Или я должен посмотреть в БД информацию об этом.

1 Ответ

1 голос
/ 01 апреля 2020

Решение, которое я использовал для этого, состоит в том, чтобы запретить SignInAsyn c во время входа в систему POST, и да, это будет использовать информацию db.

В вашем методе входа в систему POST просто добавьте логическую проверку для свойства Email Verified перед выполнением SignInAsyn c. Вам не нужно полностью копировать приведенный ниже код, просто добавьте логическую проверку.

   [HttpPost]
   public ActionResult YourLoginMethod(loginModel model){
      // get user
      var user = db.ApplicationUsers.Where(a=>a.Key == model.Key).FirstOrDefault();

      if(user!=null){
         if(user.IsEmailVerified){
            // if the email verified property is true call SignInAsync
            var result = await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
            // .. code redirect here
         }else{
            // tell the user that his email is not verified return to a view with error
            return View();
         }
      }

      // cant find user
      return View();
   }

Или, если вы хотите изменить SignInManager, вы можете на самом деле наследовать его и переопределить SignInAsyn c потому что SignInAsyn c является виртуальным, как упомянуто в документах .

   public class CustomSignInManager:SignInManager{
      public override Task SignInAsync(...){
         // check for user email verified first with db context

         if(emailIsVerified){
            // call base class implementation
            base.SignInAsync(...)
         }
      }
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...