加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-membership – 具有自定义成员资格提供程序的MVC 4模板

发布时间:2020-12-16 07:04:59 所属栏目:asp.Net 来源:网络整理
导读:我想要做的是使用Visual Studio 2012附带的默认MVC 4模板作为我的新项目的基础.但是,我想用自定义成员资格提供程序替换SQL提供程序,以便我可以访问我的RavenDB来获取我的用户.我已经像以前一样实现了自定义提供程序,但WebSecurity方法抛出了以下异常. 这行代
我想要做的是使用Visual Studio 2012附带的默认MVC 4模板作为我的新项目的基础.但是,我想用自定义成员资格提供程序替换SQL提供程序,以便我可以访问我的RavenDB来获取我的用户.我已经像以前一样实现了自定义提供程序,但WebSecurity方法抛出了以下异常.

这行代码:

ViewBag.HasLocalPassword =
OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));

具体方法是:

WebSecurity.GetUserId

抛出这个例外:

You must call the “WebSecurity.InitializeDatabaseConnection” method
before you call any other method of the “WebSecurity” class. This call
should be placed in an _AppStart.cshtml file in the root of your site.

现在我无法调用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;
}

现在,它在VerifyProvider方法中失败的唯一原因是因为调用了VerifyInitialized,我无法在我的成员资格提供程序中覆盖它.此外,如果它没有调用我的提供程序,那么我不确定在处理VerifyInitialized时调用了什么代码.

internal virtual void VerifyInitialized()
{
}

我正在删除Web.Config中的所有其他成员资格提供程序.至少我想我是.这是条目.

<membership defaultProvider="RavenMembershipProvider">
    <providers>
        <clear />
        <add name="RavenMembershipProvider" type="BigGunsGym.Infrastructure.Providers.RavenMembershipProvider" />
    </providers>
</membership>

解决方法

事实证明我让我的提供者继承自SimpleMembershipProvider而不是ExtendedMembershipProvider.我认为没关系,因为SimpleMembershipProvider继承了ExtendedMembershipProvider,但它不起作用.

将我的提供程序更改为继承自ExtendedMembershipProvider后,错误就消失了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读