我使用 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 用户调用,但不是为经过表单身份验证的用户调用的。
我的实施可能有什么问题?
谢谢。