c# - 在 MembershipProvider/FormsAuthenticationTicket 中存储额外的用户数据

标签 c# asp.net asp.net-mvc asp.net-mvc-2

我已经使用自定义数据存储实现了我自己的自定义 MembershipProvider。到目前为止没有问题。我希望人们使用他们的电子邮件而不是用户名登录。因为我有自己的数据存储,所以这不是主要问题,我可以将电子邮件作为 MembershipProvider 的用户名传递。

我的问题是,如何在 FormsAuthenticationTicket 中存储额外的自定义用户数据?我想存储一些永远不会改变的东西,比如他们的用户 ID、名字/姓氏和国家/地区。我开始考虑使用 UserData 创建 FormsAuthenticationTicket,但很快就搞糊涂了。如何将多个内容存储到此 UserData 中,以及如何轻松在每个 ASP.NET MVC2 页面上读回此数据。我发现了很多示例,但没有一个在 MVC2 方面看起来真的那么好。必须有一个简单的方法来做到这一点。

在每次请求时从数据库中读取用户 ID、名字/姓氏和国家/地区是没有意义的,因为它们永远不会改变。另外,虽然我希望用户使用他们的电子邮件登录,但我想将他们的 UserId 存储在 auth cookie 中,以便它可以用于几乎每个用户相关的数据库查询而不是电子邮件(因为在所有表中,用户数据与 UserId 一起存储 - 而不是电子邮件,因为从技术上讲,电子邮件可以更改 - 我已经在涉及 MembershipProvider 时解决了这些问题。

在 ASP.NET MVC2 中存储像这样的额外用户数据的最佳实践是什么?

最佳答案

这篇文章展示了(除其他外)存储在 FormsAuthenticationTicket.UserData 中并从基本 Controller 读取它的细节。 http://www.west-wind.com/weblog/posts/899303.aspx

正如上面有人建议的那样,一个包含所有需要的信息的简单数据类和一对序列化/反序列化方法就可以完成这项工作。

    public class UserState
    {
        public int Id { get; set; }

        public Guid ActivationId { get; set; }
        public string UserName { get; set; }
        public string Email { get; set; }
        public bool IsAdmin { get; set; }

        // Serialize    
        public override string ToString()
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            string result = serializer.Serialize(this);
            return result;
        }

        // Deserialize
        public static UserState FromString(string text)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Deserialize<UserState>(text);
        }
    }
}

关于c# - 在 MembershipProvider/FormsAuthenticationTicket 中存储额外的用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3389387/

相关文章:

c# - 向 SQL Server 数据库中插入语句

c# - WebApi 路由标识与同一 URL 匹配的多个 Controller 类型。怎么解决?

c# - ajax jquery post,需要对初学者进行一些微调

c# - 来自数据库的数据未返回,但正常列表是

asp.net - Asp.Net Mvc 中动态数据的替代方案

c# - 返回 RedirectToAction 与返回 Action

c# - 使用 Kendo Grid 内联创建新记录如何更新新记录的 key ID?

c# - 如何在 C# 中将 null 数组反序列化为 null?

c# - 访问数组子集的方法?

asp.net - asp.net web api 和 odata 的路由