0

まず最初に。私は完全な OAuth 初心者です。これは私の最初の刺し傷であり、物事は毛むくじゃらになっています...

Durandal & Web API を使用してシングル ページ アプリケーションを作成しています。ユーザーは、任意のソーシャル ネットワークを使用してログインできる必要があります。私はデータベースにまったくアクセスできません。サーバー側で消費する保護されていないサードパーティの Web サービスを呼び出す必要があり、OAuth を使用して保護する必要があります。

だから私は、Facebookのコントロール/ボタンを使用してログインを生成するソリューションにファイルを追加することができました(新しいMVC4 Webアプリケーションを作成し、すべての認証関連ファイル、更新されたブートストラッパーなどを手動でコピーして貼り付けました..)、コードはほとんどの部分で機能するようです。

Facebookがリダイレクトするとき

 [AllowAnonymous]
 public ActionResult ExternalLoginCallback(string returnUrl)
 {
     AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(this.Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
     if (!result.IsSuccessful)
     {
        return this.RedirectToAction("ExternalLoginFailure");
     }

     if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
     {
        return this.RedirectToLocal(returnUrl);
     }

        //code removed for brevity       ....
  } 

次の行を実行しようとすると、指定されたエラーが発生します。

OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false)

データベースがないため、コントローラから [InitializeSimpleMembership] 属性を削除しました。

これがこれまでで最もばかげた質問である場合は、ご容赦ください。しかし...

ログインに失敗するのはなぜですか? その時点で、アプリは Facebook にログインしようとしているのではなく、なぜデータベースが必要なのですか? または、使用しているWebサービスでのログイン/承認呼び出しで、そのコードセクションを削除/置換できると言っているのは正しいですか?

4

1 に答える 1

1

これまでで最もばかげた質問ではありません。ロングショットではありません。ただし、メンバーシップ プロバイダーは引き続き を使用するように設定されており、既定のメンバーシップ プロバイダーを使用するため、エラーが発生していSimpleMembershipProviderますOAuthWebSecurity。データベースを使用したくない場合は、使用する別のメンバーシップ プロバイダーを作成または検索する必要があります。

編集:DBにアクセスできないと言ったのは知っていますが、SQL Compactを使用できる場合は、デフォルトのSimpleMembershipProvider(Hanselmanのブログをチェックしてください)をそのまま使用するか、DevArtにSQLLiteプロバイダーがあります。また、MemFlex プロジェクトには RavenDb プロバイダーがあります。それらのどれも機能しない場合は、自分で作成する必要があるかもしれません。

于 2013-08-28T15:16:03.703 に答える