0

私のユーザーモデルは次のようになります。

public class User
{
    [Key]
    [Required]
    [StringLength(30, MinimumLength = 3)]
    [Display(Name = "Username")]
    public String Name { get; set; }

    [EmailAddress]
    [Required]
    [MaxLength(254)]
    [Display(Name="Email address")]
    public String Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [StringLength(20, MinimumLength = 6)]
    public String Password { get; set; }

休みは関係ありません。

次の問題があります。ログインを検証しようとすると、電子メールアドレスを入力する必要があります。入力し[Required]ない場合ModelState.IsValidは返さfalseれ、ログインロジックがスキップされるためです...[Required]登録で必要なので削除できませんが、また、ユーザーがユーザー名のみでログインできるようにしたい。登録時にのみ電子メールを要求する方法はありますか? あなたの提案と違う場合は、メールから Require を削除しますか?

ログイン:

if (ModelState.IsValid)
        {
            if (IsValid(user.Name, user.Password))
            {
                FormsAuthentication.SetAuthCookie(user.Name, false);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("", "Login Data is incorrect");
            }
        }

そして登録:

if (ModelState.IsValid)
        {
            using (var db = new CardContext())
            {
                var crypto = new SimpleCrypto.PBKDF2();

                var encrPass = crypto.Compute(user.Password);

                var sysUser = db.Users.Create();

                sysUser.Avatar = null;
                sysUser.Banned = false;
                sysUser.Email = user.Email;
                sysUser.Information = "";
                sysUser.Name = user.Name;
                sysUser.Password = encrPass;
                sysUser.Rank = null;
                sysUser.Salt = crypto.Salt;

                db.Users.Add(sysUser);
                db.SaveChanges();

                return RedirectToAction("Index", "Home");
            }
        }
        else
        {
            ModelState.AddModelError("", "Registration data is incorrect.");
        }
4

1 に答える 1