問題が修正されました。以下を参照してください
私がしていることはこれです:
乱数を生成する->セッションに保存する->FacebookのOAuthサービスの「state」パラメーターを使用してFacebookに渡す->返された状態が私のセッションの状態と同じであることを確認する(これはCSRF保護のために行われます) 。
これは常に機能しましたが、問題ありません。しかし、どういうわけか、それはもう機能していません(セッションを読み込もうとすると、NullReferenceExceptionが発生するため、セッションは空のようです)。おそらく何かを変えたのですが、何がわからないのです。
Facebookから状態が返されるコードの部分にブレークポイントを設定しようとしましたが、どういうわけかブレークポイントにヒットしません...ブレークポイント間のコードは実行されますが、ブレークポイントはヒットしません。
これはすべてを実行しているコードです:
public ActionResult SignUpButton()
{
int random = RandomHelpers.GetRandomInteger(null);
Session.Add("facebookState", random.ToString(CultureInfo.InvariantCulture));
ViewBag.Uri = "https://www.facebook.com/dialog/oauth?" +
"client_id=" + _facebookAuthenticationService.GetAppId() +
"&redirect_uri=" + _facebookAuthenticationService.GetReturnUri() +
"&scope=email" +
"&state=" + random;
return PartialView();
}
public ActionResult Register()
{
string error = Request.QueryString["error"];
string state = Request.QueryString["state"];
string originalState = Session["facebookState"].ToString();
(簡潔にするために残りを削除しました)。SignUpButton関数は、FacebookにつながるサインアップURLを持つボタンを含む部分ビューを返します。Facebookはlocalhost:xxx / Account / Register(これはRegister関数です)に戻り、この関数はヒットし(ただし、Registerのブレークポイントは何もしません)、Session["facebookState"]。ToString( ) 部。
これは、web.configのセッション関連の設定がどのように見えるかです。
<sessionState mode="InProc">
<providers>
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</providers>
</sessionState>
私はそれを理解することができません。エラーが発生せず、FacebookグラフAPIからデータが返されるようにコードを書き直しましたが、コードのその部分をデバッグできないことは受け入れられません(記録のために:SingUpButtonメソッドのブレークポイントがヒットします) 。
誰かが私を助けてくれることを願っています。前もって感謝します!