客户会员提供商的例外情况

时间:2013-09-13 10:23:33

标签: asp.net-mvc asp.net-mvc-4 asp.net-membership membership-provider

我使用ASP.NET MVC4应用程序。 我正在尝试实现自己的自定义成员资格提供程序,继承自SimpleMembership提供程序类。

我的目标: 1.使用自定义NoSQL数据存储。 2.在单个提供程序中支持Forms和OAuth(Facebook)身份验证。

我成功实现了用户自行注册和表单登录。不幸的是,在表单登录后,我在转到/帐户/管理URL时遇到异常(通过点击用户名)。

例外在AccountController方法中:

    public ActionResult Manage(ManageMessageId? message)
    {
        ViewBag.StatusMessage =
            message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed."
            : message == ManageMessageId.SetPasswordSuccess ? "Your password has been set."
            : message == ManageMessageId.RemoveLoginSuccess ? "The external login was removed."
            : "";


        ViewBag.HasLocalPassword = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));
        ViewBag.ReturnUrl = Url.Action("Manage");
        return View();
    }

收到的User.Identity.Name等于登录用户的用户名。

然而是对

的呼唤
 WebSecurity.GetUserId(User.Identity.Name)

抛出和异常:

System.NullReferenceException was unhandled by user code
 HResult=-2147467261
 Message=Object reference not set to an instance of an object.
 Source=WebMatrix.WebData
 StackTrace:
   at WebMatrix.WebData.WebSecurity.GetUserId(String userName)
 [continue stack]

在SimpleMembershipProvider中,我看到一种方法,用于返回为OAuth用户调用的用户ID,但不会为表单身份验证的用户返回。

我的实施可能出现什么问题?

感谢。

1 个答案:

答案 0 :(得分:1)

SimpleMembershipProvider专门用于与Entity Framework和SQL Server一起使用。如果您想要使用NoSQL存储,您应该创建自己的自定义MembershipProvider,它继承自ExtendedMembershipProvider类,并实现您的功能所需的方法。其中相当一部分可以留下UnimplementedException而不会对您的应用程序的其余部分产生任何负面影响。