私のユーザーモデルは次のようになります。
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.");
}