当用户登录时,我需要节省时间。
首先,我尝试在 AccountController Login 中实现它。但现在我知道,这是不可能的,因为 User.Id 是 -1。
好的,我该怎么做才能节省用户表中的时间?
对我来说下一个问题是,什么时候做。我需要获取用户的信息是在重定向后创建的。重定向可以无处不在。
一个想法是,获取设置 ASPXAUTH cookie 的时间,但我不知道如何获取它。
有什么解决办法吗?
当用户登录时,我需要节省时间。
首先,我尝试在 AccountController Login 中实现它。但现在我知道,这是不可能的,因为 User.Id 是 -1。
好的,我该怎么做才能节省用户表中的时间?
对我来说下一个问题是,什么时候做。我需要获取用户的信息是在重定向后创建的。重定向可以无处不在。
一个想法是,获取设置 ASPXAUTH cookie 的时间,但我不知道如何获取它。
有什么解决办法吗?
如果您只需要上次登录时间,您可能会从 SimpleMembership 收到该信息:
var User = Membership.GetUser("Username") // get user by name
DateTime LastActivityDate = User.LastActivityDate; // get last activity date and time
DateTime LastLogin = User.LastLoginDate; // Last login date and time
DateTime LastPasswordChange = User.LastPasswordChangedDate;
只是自己学习这些东西。
您需要扩展AccountModel
, inAccountModel.cs
例如,我将电子邮件添加到我的 UserProfile 表生成中。
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
}
public string Email { get; set; }
我还需要将它添加到文件下方的 RegisterModel
public class RegisterModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[Display(Name = "Email Address")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
这里的重要部分是这个新条目:
[Required]
[Display(Name = "Email Address")]
public string Email { get; set; }
然后我需要将电子邮件信息添加到 RegisterView,这与使用其他部分完全相同,因为它现在是模型的一部分。
当您将信息保存回数据库时,最重要的部分之一就出现了。在我的注册操作中,我有WebSecurity.CreateUserAndAccount
已经定义的方法。但是,它需要进行调整,才能使用这种方法将额外的信息添加到数据库中。
值得庆幸的是,其中一个重载允许将字典传递给额外的数据。
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { Email = model.Email }, false);
new { Email = model.Email }
如果您还没有在数据库中添加该列,我认为它不会选择它。您需要确保该列存在,因此请事先进行设置。