首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SimpleMembership管理配置文件?

如何使用SimpleMembership管理配置文件?
EN

Stack Overflow用户
提问于 2012-09-10 20:56:48
回答 4查看 17.6K关注 0票数 19

我有一个基于互联网模板的ASP.NET MVC4网站。我使用的是我使用该模板设置的SimpleMembership。

我可以修改已经为我创建的Users表,但我不确定修改我添加的额外字段的“正确”方式。我想要全名,电子邮件等,并已将它们添加到用户表,但似乎没有办法通过SimpleMembership网络安全。*静态方法更新。

您是否应该在SimpleMembership应用程序接口之外使用EF自行更新这些属性?

EN

回答 4

Stack Overflow用户

发布于 2012-09-29 01:45:15

1-您需要启用迁移,最好使用EntityFramework 5

2-移动您的

代码语言:javascript
复制
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "EmailAddress", autoCreateTables: true); 

添加到YourMvcApp/Migrations/Configuration.cs类中的种子方法

代码语言:javascript
复制
    protected override void Seed(UsersContext context)
    {
        WebSecurity.InitializeDatabaseConnection(
            "DefaultConnection",
            "UserProfile",
            "UserId",
            "UserName", autoCreateTables: true);

        if (!Roles.RoleExists("Administrator"))
            Roles.CreateRole("Administrator");

        if (!WebSecurity.UserExists("lelong37"))
            WebSecurity.CreateUserAndAccount(
                "lelong37",
                "password",
                new {Mobile = "+19725000000", IsSmsVerified = false});

        if (!Roles.GetRolesForUser("lelong37").Contains("Administrator"))
            Roles.AddUsersToRoles(new[] {"lelong37"}, new[] {"Administrator"});
    }

现在,EF5将负责创建您的UserProfile表,之后您将调用WebSecurity.InitializeDatabaseConnection,仅将SimpleMembershipProvider注册到已经创建的UserProfile表中,并告诉SimpleMembershipProvider哪一列是UserId和UserName。我还展示了一个示例,说明如何在种子方法中添加用户和角色,并将两者与自定义手机属性/字段相关联,例如用户的手机(号码)和IsSmsVerified

3-现在,当您从包管理器控制台运行update-database时,EF5将为您的表提供所有自定义属性

有关更多参考,请参阅这篇文章,来源代码:

票数 22
EN

Stack Overflow用户

发布于 2012-09-10 22:39:38

他们使得使用SimpleMembership修改配置文件变得很容易。SimpleMembership使用的是code first EF模型,用户配置文件在AccountModels.cs文件中定义,该文件是作为MVC4的互联网模板的一部分生成的。只需修改类UserProfile并在类定义中添加新字段。例如,为电子邮件添加一个字段如下所示:

代码语言:javascript
复制
[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string Email { get; set; }
}

下面是一个关于如何访问电子邮件字段的示例:

代码语言:javascript
复制
var context = new UsersContext();
var username = User.Identity.Name;
var user = context.UserProfiles.SingleOrDefault(u => u.UserName == username);
var email = user.Email;

下面是添加电子邮件字段后的数据库外观。

有一个很好的博客描述了一些changes in SimpleMembership here。您还可以在customizing and seeding SimpleMembership here上找到更详细的信息。

票数 15
EN

Stack Overflow用户

发布于 2012-09-10 21:21:04

如果你看看accountcontroller的第273行,你会发现这一行

代码语言:javascript
复制
db.UserProfiles.Add(new UserProfile { UserName = model.UserName });

看起来甚至OOTB他们(MS)都在做你建议的事情,并使用EF进行更新。

我也在寻找更新和访问这些属性的“正确”方式。

编辑:

这是我的解决方案(如果有人说有一种OOTB方法,我很高兴)。

UserProfile (来自SimpleMembership的.net实体)包装在会话类中。

代码语言:javascript
复制
public static class sessionHelpers {
     public static UserProfile userProfile
        {
            get
            {
                if (HttpContext.Current.Session["userProfile"] != null)
                {
                    return HttpContext.Current.Session["userProfile"] as UserProfile; 
                }
                else
                {
                    using (UsersContext db = new UsersContext())
                    {
                        HttpContext.Current.Session["userInfo"] =
                        db.UserProfiles.Where(x => x.UserName == 
                            HttpContext.Current.User.Identity.Name).FirstOrDefault();

                   return db.UserProfiles.Where(x => x.UserName == 
                       HttpContext.Current.User.Identity.Name).FirstOrDefault();
                    }
                }
            }
            set { HttpContext.Current.Session["userProfile"] = value; }
        }
}

您可以通过执行以下操作来访问配置文件表

代码语言:javascript
复制
string foo = sessionHelpers.userProfile.FIELDNAME;

其中sessionHelpers是我的包装器类。if块只是确保如果在当前会话中没有设置它,则访问它将尝试获取它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12352218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档