我有ASP.NET MVC 4应用程序.我使用Simple Membership Provider允许在登录表单下勾选记住我的复选框.如果勾选,则创建persitent cookie .ASPXAUTH,从登录日期起100天后到期.一切正常,除了应用程序的主菜单.
菜单的某些部分仅供管理员用户使用.我用:
@if (User.IsInRole("Administrator")) { @Html.Partial("_MainMenuPartial") }
Run Code Online (Sandbox Code Playgroud)
锁定它们不被普通用户渲染.登录系统后,此方法可以正常工作.当我在一段时间后返回并使用持久性cookie来验证我时,我确实登录了,但是
@User.IsInRole("Administrator")
Run Code Online (Sandbox Code Playgroud)
返回"False",因此我看不到管理员菜单项.同时
@User.Identity.Name
Run Code Online (Sandbox Code Playgroud)
返回正确的登录名和
@User.Identity.IsAuthenticated
Run Code Online (Sandbox Code Playgroud)
返回"True",证明持久性cookie工作正常.为什么我不能访问用户角色,即使用户通过系统进行身份验证呢?
我用VS2012开始了一个新的互联网项目,我试图重新调整我的项目,我似乎无法保持SimpleMemberhsipProvider的工作.基本上,我所做的就是将模型对象与其他几个项目一起移动到核心项目中.我已经实现了Ninject,并试图通过使用存储库模式来获取我的数据来抽象实体.我真的不觉得我对当前的项目做了很多改变,但出于某种原因,当我启动应用程序时,我得到:
{"尚未启用角色管理器功能."}
框架提供的ActionFilter是在以下情况下引发错误的位置:
WebSecurity.InitializeDatabaseConnection("DefaultConnection","UserProfile","Id","UserName",autoCreateTables:true);
叫做.
这是一些堆栈跟踪:
[ProviderException:尚未启用角色管理器功能.] System.Web.Security.Roles.EnsureEnabled()+
9561885
System.Web.Security.Roles.get_Provider()+8
WebMatrix.WebData.WebSecurity.InitializeProviders(DatabaseConnectionInfo connect, String userTableName,String userIdColumn,String userNameColumn,Boolean autoCreateTables)+104
WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(String connectionStringName,String userTableName,String userIdColumn,String userNameColumn,Boolean autoCreateTables)+100
InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer .. C:\ Users\Kyle\Documents\Visual Studio 2012\Projects\InoutBoard\InoutBoard.Core\Infrastructure\Filters\InitializeSimpleMembershipAttribute.cs中的ctor():42[InvalidOperationException:无法初始化ASP.NET Simple Membership数据库.有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=256588]
c:\ Users\Kyle\Documents\Visual Studio 2012中的InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer..ctor() \项目\ InoutBoard\InoutBoard.Core \基础设施\ \过滤InitializeSimpleMembershipAttribute.cs:46
我将在以下链接上的github上托管代码https://github.com/keroger2k/InoutBoard
asp.net asp.net-mvc entity-framework asp.net-mvc-4 simplemembership
WebSecurity.Login 在simplemembership中使用用户名和密码,如何使用用户名或电子邮件而不是用户名?来登录用户,以使用户可以自由输入他的电子邮件或用户名进行登录.
我有一个基于互联网模板的ASP.NET MVC 4站点.我正在使用我使用该模板设置的SimpleMembership.
我可以修改已经为我创建的Users表,但我不确定修改我添加的额外字段的"正确"方法.我想要Fullname,Email等,并将它们添加到用户表中,但似乎无法通过SimpleMembership WebSecurity.*静态方法进行更新.
您是否应该在SimpleMembership API之外使用EF自己更新这些属性?
有没有办法让simpleMembershipProvider使用盐?
当我创建我的mvc4 web项目并将默认连接设置为sqlexpress,然后注册,我的用户没有密码盐

我希望它尽可能安全,没有太多麻烦.
如何获取登录用户的UserId?我正在使用标准系统生成的AccountModel.我可以使用以下命令获取用户名
User.Identity.Name
Run Code Online (Sandbox Code Playgroud)
但我没有看到UserId字段.我想将UserId用作另一个表的外键.
我一直在使用MVC4 Internet模板编写Web应用程序.我真的不需要任何复杂的用户管理,所以我选择了默认的SimpleMembershipProvider.我正在初始化App_Start中的成员资格,我有角色和用户设置和工作.我没有使用SSO或任何其他OAuth功能.现在我有一个忘记密码的测试人员,在谷歌搜索一整天后,我发现我不知道如何重置密码或更改密码!
我已阅读文档,发现如果使用SimpleMembership则不支持 ResetPassword功能.我的问题是,我怎么做:
我发现web.config设置(理论上)将成员资格提供程序设置为使用SimpleMembership,但我不确定如何指定要使用的表(假设这是正确的方法).
web.config部分:
<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
<providers>
<clear/>
<add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
</providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
<providers>
<clear/>
<add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
</providers>
</membership>
Run Code Online (Sandbox Code Playgroud)
以及我认为我需要在web.config中拥有的当前InitializeDatabaseConnection:
WebSecurity.InitializeDatabaseConnection("UPEFSSecurity", "Datamart_User", "UserId", "UserName", autoCreateTables: true);
Run Code Online (Sandbox Code Playgroud) 我们被告知,"SimpleMembership"是asp.net会员/角色管理的未来.MVC4"Internet应用程序"模板使用SimpleMembership实现帐户管理.但是,它的实现方式将所有应用程序层合并为1.
让我感到震惊的是,经过他们用MVC正确分层应用程序的所有工作后,我们得到了没有DI,使用WebMatrix DLL和完全缺乏SoC的成员资格的"前进之路".特别是SimpleMembershipInitialization的ActionFilterAttribute - 它继承自MVC属性并直接调用EF DBContext.
我意识到自己很懒,但有人使用SimpleMembership做了一个"正确"的模板,这意味着我的应用程序中可以有适当的分隔层,而且我的MVC应用程序中没有EF DBContext引用?
我正在使用ASP.Net MVC 4项目的默认Internet应用程序模板.帐户控制器中的注册操作是这样的 -
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
但是,这并未提供任何可立即使用的功能来使用电子邮件地址进行注册,以及发送电子邮件以进行确认和帐户激活的步骤. 我看到WebMatrix的Starter Site模板使用WebSecurity并提供我正在寻找的功能,但它不遵循标准的MVC模式.我可以混合两种方法来获得MVC 4兼容解决方案,但我正在寻找准备好使用代码来节省时间.任何好的样品或指针都非常感谢.谢谢.
我试图在我的MVC 4中第一次使用SimpleMembership,我已经有了一个基于它的现有数据库和EF5模型!我搜索了很多,但我无法找到如何在我的情况下使用它,并在我自己的模型下拥有一切.
如果有人能让我知道如何做到这一点会很棒.
谢谢
ef-database-first asp.net-mvc-4 sql-server-2012 entity-framework-5 simplemembership