ASP.NET MVC4 アプリケーションを使用しています。SimpleMembership プロバイダー クラスから継承された独自のカスタム メンバーシップ プロバイダーを実装しようとしています。
私の目標: 1. カスタム NoSQL データ ストアを使用します。2. 1 つのプロバイダーでフォームと 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 には、OAuth ユーザーに対して呼び出されたユーザー ID を返すメソッドが表示されますが、フォーム認証されたユーザーに対しては呼び出されません。
私の実装で何が問題になる可能性がありますか?
ありがとう。