Bob*_*non 5 asp.net-membership membership-provider webmatrix asp.net-mvc-4
我想要做的是使用Visual Studio 2012附带的默认MVC 4模板作为我的新项目的基础.但是,我想用自定义成员资格提供程序替换SQL提供程序,以便我可以访问我的RavenDB来获取我的用户.我已经像以前一样实现了自定义提供程序,但WebSecurity方法抛出了以下异常.
这行代码:
ViewBag.HasLocalPassword = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));
具体方法是:
WebSecurity.GetUserId
抛出这个例外:
在调用"WebSecurity"类的任何其他方法之前,必须调用"WebSecurity.InitializeDatabaseConnection"方法.此调用应放在站点根目录中的_AppStart.cshtml文件中.
现在我无法调用InitializeDatabaseConnection,因为我的提供程序不是SQL提供程序.此方法需要SQL提供程序和SQL连接字符串.这是一个常见问题还是我错过了什么?为什么必须初始化WebSecurity,为什么只能使用SQL提供程序进行连接?
我是否必须将代码更改为不使用WebSecurity类?
我整天都在这里,我很累.我希望我没有忽视一些简单的事情.也许还有一个朗姆酒和可乐会帮助......
更新:2012年8月19日
我反编译GetUserId方法,发现它失败的唯一原因是因为VerifyProvider调用.
public static int GetUserId(string userName)
{
WebSecurity.VerifyProvider();
MembershipUser user = Membership.GetUser(userName);
if (user == null)
return -1;
else
return (int) user.ProviderUserKey;
}
private static ExtendedMembershipProvider VerifyProvider()
{
ExtendedMembershipProvider membershipProvider = Membership.Provider as ExtendedMembershipProvider;
if (membershipProvider == null)
throw new InvalidOperationException(WebDataResources.Security_NoExtendedMembershipProvider);
membershipProvider.VerifyInitialized();
return membershipProvider;
}
Run Code Online (Sandbox Code Playgroud)
现在,它在VerifyProvider方法中失败的唯一原因是因为调用了VerifyInitialized,我无法在我的成员资格提供程序中覆盖它.此外,如果它没有调用我的提供程序,那么我不确定在处理VerifyInitialized时调用了什么代码.
internal virtual void VerifyInitialized()
{
}
Run Code Online (Sandbox Code Playgroud)
我正在删除Web.Config中的所有其他成员资格提供程序.至少我想我是.这是条目.
<membership defaultProvider="RavenMembershipProvider">
<providers>
<clear />
<add name="RavenMembershipProvider" type="BigGunsGym.Infrastructure.Providers.RavenMembershipProvider" />
</providers>
</membership>
Run Code Online (Sandbox Code Playgroud)
事实证明我让我的提供者继承自SimpleMembershipProvider而不是ExtendedMembershipProvider.我认为没关系,因为SimpleMembershipProvider继承了ExtendedMembershipProvider,但它不起作用.
将我的提供程序更改为继承自ExtendedMembershipProvider后,错误就消失了.
| 归档时间: |
|
| 查看次数: |
12311 次 |
| 最近记录: |