Подтверждение логина с помощью электронной почты или телефона и пароля - PullRequest
0 голосов
/ 17 февраля 2019

В моем основном проекте ASP.net у меня есть страница входа с 2 свойствами как

public class loginModel
{
    public string EmailOrPhoneNumber { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
}

enter image description here

Я просто хочу сделать страницу входа, котораямогу войти по электронной почте или по номеру телефона, но я не знаю, как проверить это свойство (подтвердить адрес электронной почты и номер телефона)

Любое предложение?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

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

public class EmailOrPhoneNumberAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        string valueAsString = value.ToString();

        const string emailRegex = @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
        bool isValidEmail = Regex.IsMatch(valueAsString, emailRegex);

        if (isValidEmail)
        {
            return ValidationResult.Success;
        }

        const string usaPhoneNumbersRegex = @"\(?\d{3}\)?-? *\d{3}-? *-?\d{4}";
        bool isValidPhone = Regex.IsMatch(valueAsString, usaPhoneNumbersRegex);

        if (isValidPhone)
        {
            return ValidationResult.Success;
        }

        return new ValidationResult("Invalid email or phone number.");
    }
}

Использование будет выглядеть просто так:

public class Person
{
    public string Name { get; set; }

    [EmailOrPhoneNumber]
    public string EmailOrPhoneNumber { get; set; }
}
  • Обратите внимание, что ModelState автоматически позаботится о проверке.
0 голосов
/ 17 февраля 2019
  1. Вы можете проверить свое поле с помощью регулярного выражения

a.Определите свое регулярное выражение (Регулярное выражение электронной почты - это то, которое я использую, а регулярное выражение телефона: PhoneAttribute )

const string RGX_Email = "^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
          "(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$";
const string RGX_Phone = @"^(\+\s?)?((?<!\+.*)\(\+?\d+([\s\-\.]?\d+)?\)|\d+)([\s\-\.]?(\(\d+([\s\-\.]?\d+)?\)|\d+))*(\s?(x|ext\.?)\s?\d+)?$";

b.Затем вы можете проверить с помощью атрибута регулярного выражения

[RegularExpression($"{RGX_Email}|{RGX_Phone}", ErrorMessage = "Invalid Phone or Email")]
public string EmailOrPhoneNumber { get; set; }
А на стороне сервера вы можете использовать код, подобный этому, для управления вашей моделью
if(String.IsNullOrEmpty(model.EmailOrPhoneNumber)) 
   return error message;
if(model.EmailOrPhoneNumber.Contains("@"))
   return SignInWithEmail(model);
else return SignInWithPhone(model);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...