1

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 を返すメソッドが表示されますが、フォーム認証されたユーザーに対しては呼び出されません。

私の実装で何が問題になる可能性がありますか?

ありがとう。

4

1 に答える 1

1

SimpleMembershipProvider、Entity Framework および SQL Server と一緒に使用するために特別に構築されています。代わりに NoSQL ストアを使用する場合は、ExtendedMembershipProviderクラスから継承する独自のカスタム MembershipProvider を作成し、機能が動作するために必要なメソッドを実装する必要があります。UnimplementedExceptionそれらのかなりの数は、アプリケーションの残りの部分に悪影響を与えることなくスローすることができます。

于 2013-09-13T11:45:41.877 に答える