0

当用户登录时,我需要节省时间。

首先,我尝试在 AccountController Login 中实现它。但现在我知道,这是不可能的,因为 User.Id 是 -1。

好的,我该怎么做才能节省用户表中的时间?

对我来说下一个问题是,什么时候做。我需要获取用户的信息是在重定向后创建的。重定向可以无处不在。

一个想法是,获取设置 ASPXAUTH cookie 的时间,但我不知道如何获取它。

有什么解决办法吗?

4

2 回答 2

0

如果您只需要上次登录时间,您可能会从 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;
于 2013-09-16T19:14:38.717 回答
0

只是自己学习这些东西。

您需要扩展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 }

如果您还没有在数据库中添加该列,我认为它不会选择它。您需要确保该列存在,因此请事先进行设置。

于 2013-10-14T00:37:21.503 回答