【问题标题】:Update custom membershipuser更新自定义会员用户
【发布时间】:2016-01-27 19:07:58
【问题描述】:

我似乎无法在任何地方找到答案。我正在使用自定义会员提供程序和会员用户以及我自己的表格,这似乎比它的价值要麻烦得多。更新用户记录时,我似乎也需要更新它的会员用户实例,否则我依赖会员用户的数据,它与更新后的数据库不对应。

我创建了自己的更新会员用户方法,因为现有的只接受它自己的 MembershipUser 类:

public static void UpdateAccountUser(AccountUser accountUser)
    {
        // Custom MembershipUser
        ToMembershipUser user = new ToMembershipUser(
                    "AccountUserMembershipProvider",
                    accountUser.FirstName + " " + accountUser.LastName,
                    accountUser.ID,
                    accountUser.Email,
                    "",
                    "",
                    true,
                    false,
                    DateTime.Now,
                    DateTime.MinValue,
                    DateTime.MinValue,
                    DateTime.MinValue,
                    DateTime.MinValue);

        // Fill additional properties
        user.ID = accountUser.ID;
        user.Email = accountUser.Email;
        user.FirstName = accountUser.FirstName;
        user.LastName = accountUser.LastName;
        user.Password = accountUser.Password;
        user.MediaID = accountUser.MediaID;
        user.Media = accountUser.Media;
        user.Identity = accountUser.Identity;
        user.CreatedAt = accountUser.CreatedAt;
        user.UpdatedAt = accountUser.UpdatedAt;

        UpdateCookie(user.Email);
    }
    private static void UpdateCookie(string email)
    {
        HttpCookie cookie = FormsAuthentication.GetAuthCookie(email, true);
        var ticket = FormsAuthentication.Decrypt(cookie.Value);

        // Store UserData inside the Forms Ticket with all the attributes
        // in sync with the web.config
        var newticket = new FormsAuthenticationTicket(ticket.Version,
                                                      ticket.Name,
                                                      ticket.IssueDate,
                                                      ticket.Expiration,
                                                      true, // always persistent
                                                      email,
                                                      ticket.CookiePath);

        // Encrypt the ticket and store it in the cookie
        cookie.Value = FormsAuthentication.Encrypt(newticket);
        cookie.Expires = newticket.Expiration.AddHours(24);
        HttpContext.Current.Response.Cookies.Set(cookie);
    }

现在显然这只是创建一个新实例而不更新现有实例,这不允许我在不注销并重新登录的情况下查看更新的详细信息。有什么想法吗?

编辑 因此,我设法找到了其他人使用他们自己的自定义更新方法的示例,但他们似乎所做的只是更新数据库而不是 MembershipUser 本身。我已经这样做了?!

我试图改为仅更新 FormsAuthenticationCookie,然后在调用 Membership.GetUser() 时,我至少传递了一个更新的 User.Identity.Name,但无济于事,即使数据库已更新,数据仍然是旧数据。我的想法已经用完了...

这可能会重复昨天的问题MembershipUser not getting updated result from database

【问题讨论】:

    标签: c# asp.net-mvc entity-framework asp.net-membership


    【解决方案1】:

    我最终发现 MembershipUser 没有更新,因为每次我调用 GetUser() 时,所涉及的查询都在使用 FirstOrDefault()。原来这会缓存结果而不是检索新结果。通过将 AsNoTracking() 添加到查询本身,我现在可以获得更新的结果,甚至无需调用 UpdateUser()。

    【讨论】:

      猜你喜欢
      • 2011-12-26
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 2011-07-26
      相关资源
      最近更新 更多