我们正在MVC 4中构建一个新站点。在检查是否允许某人登录时,有一些略微不同寻常的要求,因此在这种情况下,简单检查用户名,密码和启用是不够的(还有角色将是选中)。
我开始做传统的自定义membershipprovider类和roleprovider。 MVC4不喜欢我这样做:
This method cannot be called during the application's pre-start initialization phase.
据我所知,这是由于简单的会员提供者和oauth的东西,(我不太了解这个领域)。解决方法似乎是:
<add key="enableSimpleMembership" value="false"/>
<add key="autoFormsAuthentication" value="false"/>
让我想知道,我是否仍然在做会员提供者?我的数据库是本地的,我有一个服务层,其中包含所有逻辑,用于指示用户是否可以登录以及他们拥有哪些角色和权限。我应该看看oauth /简单会员/其他方式,或者如上所述,关闭简单的会员资格?
如果我确实通过appsetting将其关闭了,那么我可以在稍后阶段将oauth整合起来(这只是我的思考范围很广,目前还没有这个要求)。是否可以使用多种身份验证机制?
或者它真的如此简单,(accountController):
public ActionResult Login()
{
if(logiclayer.CheckAccess("username", "password"))
{
var persistCookie = false;
FormsAuthentication.SetAuthCookie("userName", persistCookie);
}
return View();
}
所以他们设置了cookie,然后控制器可以使用[Authorize]
属性?这不会考虑[Authorize(Roles = "admin")]
,因为如果没有设置角色提供程序,这会引发错误,这会回到原始问题,关于如何进行此操作。
答案 0 :(得分:1)
这里有一个讨论
asp.net 4.5 custom membership provider configuration throws strange exception
这似乎解决了这个问题,但是从最佳实践来看,我认为它仍然是使用成员资格提供者,但在配置中为enableSimpleMembership = false
设置自定义成员