Разрешить регистрацию только с определенных доменов электронной почты

#asp.net-mvc #regex

#asp.net-mvc #регулярное выражение

Вопрос:

Я разрабатываю сайт, который использует встроенную модель учетной записи / контроллер, который поставляется с новым шаблоном сайта MVC. Я хочу иметь возможность разрешать людям регистрироваться, только если они используют один из двух определенных доменов в своем адресе электронной почты.

Так, например, они могут зарегистрироваться, если они используют @domain1.co.uk или @domain2.co.uk , но никакие другие домены (например, Gmail, Yahoo и т.д.) не могут быть использованы.

Если бы кто-нибудь мог указать мне правильное направление, это было бы здорово.

Ответ №1:

При использовании сайта MVC3 по умолчанию у вас будет /Models/AccountModels.cs файл. Вы можете добавить туда регулярное выражение, чтобы вызвать проверку на стороне клиента * и на стороне сервера.

 public class RegisterModel
{
    ...

    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Email address")]
    [RegularExpression(@"^[a-zA-Z0-9._% -] (@domain1.co.uk|@domain2.co.uk)$", ErrorMessage = "Registration limited to domain1 and domain2.")]
    public string Email { get; set; }

    ...
}
  

Вам нужно будет разработать выражение, которое наилучшим образом соответствует вашим требованиям.

*проверка на стороне клиента предполагает, что ваше представление ссылается на скрипт jquery.validate и имеет Html.ValidationMessageFor(m => m.Email) и / или Html.ValidationSummary() , которые должны быть по умолчанию.

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

1. Спасибо, Джастин, это было решение для меня. Это работает отлично. Спасибо всем вам, ребята, кто разместил ответы.

2. Рад это слышать! С таким же успехом можно было бы использовать встроенную функциональность, верно?

3. Спасибо, Джастин. Это сэкономило мне время.

4. @tnktnk Круто! Рад, что это помогло.

Ответ №2:

Что еще вам нужно, кроме:

 if( email.Contains("@domain1.co.uk") || email.Contains("@domain2.co.uk") )
     Register(email);
else
    throw, return false, whatever()
  

Ответ №3:

Когда придет время выполнить проверку, т. Е. заполнено ли поле электронной почты, используйте регулярное выражение, чтобы убедиться, что оно находится в домене. Что касается того, каким должно быть фактическое регулярное выражение, в Интернете много дискуссий о проверке адресов электронной почты с их помощью. Это даже сводится к тому, что должен содержать действительный адрес электронной почты. Я нашел этот пример в Интернете, но, вероятно, это ни в коем случае не лучшее решение, поскольку я не эксперт по регулярным выражениям. Я пробовал это на нескольких примерах, но я уверен, что вы можете придумать некоторые, которые пройдут, когда они не должны:

^w ([- .']w )*@mail.com$

Где mail.com находится домен, который вы хотите проверить. Если у вас несколько доменов, вы можете либо расширить регулярное выражение, либо выполнить несколько проверок, заменив mail.com в регулярном выражении все, что хотите использовать.

Кстати, я обнаружил, что регулярное выражение в этом forums.asp.net сообщение, затрагивающее проблему, подобную вашей.

Ответ №4:

Подтвердите это как на интерфейсе (регистрационной форме), так и на серверной части.

Здесь я рекомендую плагин проверки jquery для проверки на стороне клиента.