我们有一个基于ASP.NET MVC 4和Web API的现有应用程序.该网站的管理部分使用简单成员资格.我有兴趣将应用程序升级到MVC 5/Web API 2,以利用已添加的一些新功能.但看起来它们可能不兼容.
具体来说,在将NuGet中的RC包安装到我的解决方案中的一个项目中并更新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, String userIdColumn, String userName) +206
WebMatrix.WebData.SimpleMembershipProvider.ValidateUserTable() +87
Run Code Online (Sandbox Code Playgroud)
使用我尚未升级的简单成员资格的同一解决方案中的其他项目继续正常工作.
当然,谷歌搜索更多信息会引发大量的点击,但WebMatrix没什么特别的.
FWIW:我知道Microsoft已经引入了(又一个)成员身份和身份解决方案,但除非有一种方法可以将其用于现有的简单成员资格表,或者是我们所有现有用户数据的无缝迁移路径,这不是一个真正的选择为了我们.
我刚刚尝试了一下我们应用程序当前主干的新结帐.我正在使用Visual Studio 2012,但是按照MS的说明升级现有项目.更新到MVC 5/Web API 2/EF 6后,该应用程序启动运行就好了.
web.config删除中没有明确的信任要求.我加入了代码这个问题来Global.asax.cs …
c# asp.net-mvc simplemembership asp.net-mvc-5 asp.net-identity
我已经阅读了我能找到的关于这个主题的所有内容,包括MSDN文章和SO帖子,但我仍然非常迷茫和困惑.
请回答以下内容(如果可能,请简要回答):
什么是SimpleMembership/SimpleMembershipProvider(WebMatrix.WebData)以及它们负责的是什么?
什么是WebSecurity(WebMatrix.WebData)?
什么是Membership(System.Web.Security)类?
为什么MVC4会创建一个UserProfile表和一个webpages_Membership表?它们是什么,有什么区别?MVC4创建的UserProfile类是什么?
什么是UsersContext类?
所有这些如何协同工作以进行用户身份验证?
这些问题然后导致下一个问题:
假设我有一个包含用户的现有数据库(ID,用户名,密码).我正在创建一个新的MVC4应用程序并使用表单身份验证.用户密码以加密形式(不是bcrypt)存储在数据库中.
我需要做些什么才能使它与MVC4一起使用?
我是否必须创建自定义MembershipProvider?
据我所知,WebSecurity是一个静态类(Module),它与MembershipProvider交互.MembershipProvider是一个解释特定函数如何工作的类,例如ValidateUser,CreateUser,ChangePassword.
为了解决我的问题,我假设我需要创建一个自定义MembershipProvider并告诉WebSecurity使用我的新MembershipProvider.
我已经在这个问题上获得了赏金,并打算将其授予安迪·布朗,以获得出色的答案.
forms-authentication asp.net-membership membership-provider asp.net-mvc-4 simplemembership
我喜欢MVC 4互联网模板中的新简单会员功能,其中包含指向VS 2012 RTM中外部登录的OAuth的链接.在大多数情况下,身份验证功能正常运行 然而,即使花了超过8个小时,我也无法实现基于角色的授权来操作我的控制器.SimpleMembership变得简单.
我已搜查计算器,用Google搜索和阅读已通过最新的约翰·加洛韦,尝试了很多的建议,仍然没有能够resovle这个问题.这一切都始于获取Sql连接错误,无法弄清楚为什么连接字符串和其他一切都很好.需要花费很多时间才能弄清楚Roles类是否会导致问题.
控制器上的[Authorize]属性与以前一样用于基本身份验证.但是每当我尝试使用Roles时,它都会给出sql连接错误(因为它会恢复到旧的DefaultRolesProvider,它会尝试连接到默认的SqlExpress aspnetdb文件并失败).所以类似于:
[Authorize(Roles="admin")]
Run Code Online (Sandbox Code Playgroud)
不起作用.如果我回到旧的asp.net成员资格提供程序,它会工作,但后来我丢失了简单的数据库表,令牌库确认和恢复,更安全的密码哈希,更重要的是通过OAuth进行外部登录.
在代码和剃刀视图中唯一有用的是
User.IsInRole("admin")
Run Code Online (Sandbox Code Playgroud)
这对于菜单项等是可以的,但是在控制器中的每个Action中实现都很麻烦(我不喜欢它一次只测试单个角色).
我将非常感谢任何有关解决此问题的指导.
我面对新的ASP MVC 4功能,它附带了新的成员资格数据库架构和新的初始化.在mvc 3和旧版本中,开发人员能够使用web.config中的规范创建自定义用户配置文件字段,但现在我在默认的mvc 4项目中遇到过滤器命名空间中的方法:
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
Run Code Online (Sandbox Code Playgroud)
和用户档案表:
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是方法InitializeDatabaseConnection只生成UserName和UserId我需要生成其他附加字段.
我在EF codeFirst方法方面有很好的经验,在这种情况下我尝试编辑UserProfile类:
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
[Column]
[Required]
public string UserName { get; set; }
[Column]
[Required]
public string FirstName { get; set; }
[Column]
[Required]
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是当我重新生成数据库时,我没有看到任何更改,自定义Db字段没有生成.请帮帮我,我该如何创建自定义用户字段?
c# asp.net-mvc entity-framework asp.net-mvc-4 simplemembership
我正在研究'ASP.NET MVC 4'应用程序.我正在使用/学习SimpleMembershipProvider,并尝试坚持VS2012使用Internet template(如果我没有记错的话,创建的默认逻辑,开箱即用的'SimpleMembershipProvider').
我被困在AccountController我无法想象的地方,我怎么能使用这个方法:
private ActionResult RedirectToLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,整个想法是重定向到您决定登录的位置(正是我想要完成的).我看了一下它在视图中的使用方式:
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl }))
Run Code Online (Sandbox Code Playgroud)
寻找一个实际ViewBag.ReturnUrl设置了一些值的地方,我这里只有这个方法:
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
Run Code Online (Sandbox Code Playgroud)
而且我对我应该如何获得位置/网址感到非常困惑.我设置了一些断点,我从来没有见过returnUrl不同的东西null,在这种情况下对我来说似乎很合乎逻辑,因为它在任何地方都没有价值(除非我当然错过了一些东西).
所以我真的无法弄清楚这是如何工作的.我发布以上内容只是为了表明我试图做我的作业,我尽可能多地调查,但我没有找到答案所以我在这里问.你能提供关于它如何实际工作的解释/例子吗?
我想启用ASP.NET MVC 4的SimpleMembership API与我自己的数据库模式集成.我在数据库中有一个简单明了的表,Users用这些字段调用:
我已经配置了SimpleMembership API来使用我的数据库:
WebSecurity.InitializeDatabaseConnection("MyStuff", "Users", "Id", "Name", autoCreateTables: true);
Run Code Online (Sandbox Code Playgroud)
我也可以插入一个用户:
WebSecurity.CreateUserAndAccount(model.UserName, model.Password,
new
{
IsDeleted = false,
Email = "sampledata@gmail.com"
});
Run Code Online (Sandbox Code Playgroud)
但是,密码字段(或它的哈希)没有插入到Users表中(当然),它插入到另一个调用webpages_Membership创建的表中,InitializeDatabaseConnection并且包含了许多我不需要的不必要的信息.
另外,我还有其他自动创建的表格,名为webpages_OAuthMembership,webpages_Roles和webpages_UsersInRoles,我不需要.
我已经尝试将表生成设置为false:
WebSecurity.InitializeDatabaseConnection("MyStuff", "Users", "Id", "Name", autoCreateTables: false);
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,CreateUserAndAccount调用将抛出异常,因为它找不到webpages_Membership表.
当我想使用SimpleMembership API时,看起来需要这些表.
我的问题是:当我只想要一个简单的Users表而不是更多时,我应该在这样的场景中做些什么?
我是否必须自己编写整个成员资格处理和身份验证逻辑(哈希码生成等)?
.net asp.net asp.net-membership asp.net-mvc-4 simplemembership
在MVC4中,我们有简单会员资格.我的观点是,Simple Membership是一个很好的身份模型,经过良好的文档测试和测试,不需要修复,只需要在电子邮件验证/密码重置和我们通常必须处理的所有其他内容方面进行升级.构建应用程序.然而,新的ASP.NET身份模型似乎实现了Vista在XP上实现的某种程度.我的意思是AspnetUserClaims,AspnetLogins可能已经聚集在一起了UserAliases.微软应该为我的唠叨的电子邮件部分提供一些方法.刚刚根据可能欺骗我的问题的第一次看起来讨论了我的意见
我正在尝试决定是否应该从简单成员身份转移到新的 ASP.NET身份,但由于ASP.NET身份模型的文档和测试很稀疏,冲突且难以使用Google进行定位.那么有经验的人可以总结一下利弊吗?
asp.net-mvc asp.net-mvc-4 simplemembership asp.net-mvc-5 asp.net-identity
我是Azure的新手.有人知道如何在部署到Azure网站的网站上获得详细的错误消息?
我添加SimpleMembership到网站,现在注册和登录(发布)正在显示
很抱歉,在执行您的要求时发生了一个错误.
我正在连接家用电脑上的数据库(连接没问题).
LogFiles天蓝色ftp服务器上的文件夹有一些文件,但我看不到如何使用这些信息.我希望我能在天蓝色上获得YellowScreen ......
可以SimpleMembership与使用EF模型的第一?当我尝试它时,我打电话时"无法找到所请求的.NET Framework数据提供程序"WebSecurity.InitializeDatabaseConnection.
换句话说:WebSecurity.InitializeDatabaseConnection当连接字符串使用System.Data.EntityClient提供者时,我无法接受调用(就像使用模型优先范例时那样).
要重新解决此问题,请创建一个MVC 4应用程序,并使用您在实体设计器中创建的模型优先用户类替换代码优先的 UserProfile实体类(使用MVC 4模板免费获得):
User模型的新实体,其中包含字段Id,
UserName, and FullName.因此,此时,User数据实体被映射到Users表,并通过使用System.Data.EntityClient提供程序的时髦连接字符串进行访问.User实体.一种简单的方法是基于User表及其关联的DbContext构建一个Users控制器.AccountModels.cs文件以删除UserProfile该类及其关联的UsersContext类.使用对新User类及其关联类的引用替换对(现在缺少的)UserProfile和UsersContext类的引用DbContext.我认为我的理解SimpleMembershipProvider几乎是60%,其余的是了解内部如何运作.
[InitializeSimpleMembership]仅在AccountController(默认模板)中使用过滤器时,您可以快速找到一些问题.我想你在任何地方使用Memberhsip API,或者WebMatrix.WebSecurity你需要确保首先调用这个过滤器.
后来,如果你用User.IsInRole我的_Layout.cshtml.您需要将过滤器应用于所有控制器,然后开始全局注册.
但是我只是意识到LazyInitializer.EnsureInitialized每个应用程序启动时只执行一次初始化.
那么为什么SimpleMembershipInitializer(在过滤器中)不直接在Application_Start中呢?有没有理由使用过滤器?