我们正在 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 / 简单会员资格 / 其他方式,还是如上所述,关闭简单会员资格?
如果我确实通过应用设置将其关闭,那么我是否也可以在稍后阶段集成 oauth(这只是我的想法非常广泛,目前没有这个要求)。是否可以使用多种身份验证机制?
还是真的像这样简单(accountController):
public ActionResult Login()
{
if(logiclayer.CheckAccess("username", "password"))
{
var persistCookie = false;
FormsAuthentication.SetAuthCookie("userName", persistCookie);
}
return View();
}
所以他们的cookie被设置了,然后控制器可以使用这个[Authorize]
属性吗?这没有考虑到[Authorize(Roles = "admin")]
,因为如果没有设置角色提供者,这将引发错误,这又回到了最初的问题,即应该如何完成。