【问题标题】:Exception with customer membership provider客户会员提供商的例外情况
【发布时间】:2013-09-18 00:06:43
【问题描述】:

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

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

我成功实现了用户自注册和表单登录。不幸的是,在表单登录后,我在转到 /Account/Manage 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 中,我看到了一种返回用户 ID 的方法,该方法为 OAuth 用户调用,但不适用于经过表单身份验证的用户。

我的实现可能有什么问题?

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 2012-02-09
      • 2012-03-23
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      相关资源
      最近更新 更多