我想启用ASP.NET MVC 4的SimpleMembership API来与我自己的数据库模式集成。 我在我的数据库中有一个普通而简单的表,名为Users ,这些字段是: ID 名称 密码 电子邮件 请将isDeleted 我已经configuration了SimpleMembership API来使用我的数据库: WebSecurity.InitializeDatabaseConnection("MyStuff", "Users", "Id", "Name", autoCreateTables: true); 我也可以插入一个用户: WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { IsDeleted = false, Email = "sampledata@gmail.com" }); 然而,密码字段(或它的散列)没有插入Users表(当然),它插入到另一个名为webpages_Membership表中,该表使用InitializeDatabaseConnection调用创build,并包含大量不需要的信息。 此外,我有其他自动创build的表,称为webpages_OAuthMembership,webpages_Roles和webpages_UsersInRoles我不需要。 我已经尝试将表生成设置为false: WebSecurity.InitializeDatabaseConnection("MyStuff", "Users", "Id", "Name", autoCreateTables: false); 但在这种情况下,CreateUserAndAccount调用将抛出一个exception,因为它不会findwebpages_Membership表。 它看起来像我想要使用SimpleMembership API时所需的这些表。 我的问题是:当我只想要一个简单的Users表,而不需要什么时,我应该怎么做呢? 我必须自己编写整个成员资格处理和authentication逻辑(散列码生成等)吗?
我面临着新的ASP MVC 4function,它附带了新的成员资格数据库模式和新的初始化。 在mvc 3和旧版本中,开发人员能够使用web.config中的规范创build自定义用户configuration文件字段,但现在我面临默认mvc 4项目中的filter名称空间中的方法: WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 和用户configuration文件表: [Table("UserProfile")] public class UserProfile { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int UserId { get; set; } public string UserName { get; set; } } 但是,方法InitializeDatabaseConnection只生成UserName和UserId我需要生成其他额外的字段。 我在EF codeFirst方法有很好的经验,在这种情况下,我尝试编辑UserProfile类: [Table("UserProfile")] public class UserProfile { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int UserId { get; set; } [Column] [Required] public […]
我喜欢MVC 4互联网模板中的新简单会员function,并在VS 2012 RTM中提供了与外部login相关的OAuth链接。 大部分身份validationfunction正在工作。 但是,即使花费了8个多小时,我也无法实现基于angular色的授权,以在我的控制器上工作。 SimpleMembership变成了简单的东西。 我已经search了stackoverflow,googlesearch,并阅读约翰·加洛韦的最新,尝试了很多build议,仍然无法解决这个问题。 这一切都开始得到Sql连接错误,不知道为什么当连接string和其他一切都很好。 花了好几个小时才弄清楚这是导致问题的angular色类。 控制器上的[Authorize]属性与之前的基本authentication一样。 但是任何时候我尝试使用angular色它给sql连接错误(因为它恢复到旧的DefaultRolesProvider,它试图连接到默认的SqlExpress aspnetdb文件并失败)。 所以像这样: [Authorize(Roles="admin")] 不起作用。 这将工作,如果我回到旧的asp.net会员提供商,但然后我失去了简单的数据库表,令牌基础确认和恢复,更安全的密码散列,更重要的是通过OAuth的外部login。 在代码和剃刀视图中唯一的作用是 User.IsInRole("admin") 这对于菜单项等是可以的,但是在控制器的每一个Action里面实现起来很麻烦(我不喜欢它一次只testing一个angular色)。 我将不胜感激任何指导来解决这个问题。
我们有一个基于ASP.NET MVC 4和Web API的现有应用程序。 该网站的pipe理员部分使用简单成员资格。 我有兴趣将应用程序升级到MVC 5 / Web API 2,以利用已经添加的一些新function。 但看起来他们可能不兼容。 具体来说,在将NuGet中的RC包安装到我的解决scheme中的一个项目中并更新web.config信息之后 ,应用程序在调用WebSecurity.InitializeDatabaseConnection()的行的启动过程中开始死亡,但有以下例外: [MethodAccessException: Attempt by security transparent method 'WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(System.Object, WebMatrix.Data.ConnectionEventArgs)' to access security critical method 'System.Web.WebPages.HttpContextExtensions.RegisterForDispose(System.Web.HttpContextBase, System.IDisposable)' failed.] WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(Object sender, ConnectionEventArgs e) +70 WebMatrix.Data.Database.OnConnectionOpened() +70 WebMatrix.Data.Database.EnsureConnectionOpen() +51 WebMatrix.Data.Database.QueryValue(String commandText, Object[] args) +63 WebMatrix.WebData.DatabaseWrapper.QueryValue(String commandText, Object[] parameters) +13 WebMatrix.WebData.SimpleMembershipProvider.GetUserId(IDatabase db, String userTableName, String userNameColumn, […]
我已经阅读了关于这个主题的所有内容,包括MSDN文章和SOpost,但是我仍然很迷茫和困惑。 问题 请回答以下(如果可能,简要说明): 什么是SimpleMembership / SimpleMembershipProvider ( WebMatrix.WebData ),它们是什么?它们负责什么? 什么是WebSecurity ( WebMatrix.WebData )? 什么是会员 ( System.Web.Security )类? 为什么MVC4创build一个UserProfile表和一个webpages_Membership表? 他们是什么,有什么区别? 什么是MVC4创build的UserProfile类? 什么是UsersContext类? 所有这些如何协同工作来进行用户身份validation? 我的情况 然后这些问题导致下一个问题: 假设我有一个现有的数据库与用户(ID,用户名,密码)。 我创build一个新的MVC4应用程序,并使用窗体身份validation。 用户密码以encryptionforms存储在数据库中(不是bcrypt)。 为了使它与MVC4一起工作,我需要做些什么? 我必须创build一个自定义的MembershipProvider吗? 我的知识到目前为止 据我所知, WebSecurity是一个与MembershipProvider交互的静态类(Module)。 MembershipProvider是一个解释特定函数如何工作的类,比如ValidateUser , CreateUser , ChangePassword 。 为了解决我的问题,我假设我需要创build一个自定义的MembershipProvider,并告诉WebSecurity使用我的新的MembershipProvider。 赏金? 我在这个问题上给予了一个奖励,并打算把它授予安迪·布朗一个杰出的答案。