gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:03:51 26 4
gpt4 key购买 nike

我已经使用自定义数据存储实现了我自己的自定义 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com