2011-08-09 25 views
1

に認証ポップアップを表示せずにXSSのエラーおよび「user_denied」レスポンスを返しますフロー。FacebookのJS SDKは、私が<a href="http://apps.facebook.com/insideny/" rel="nofollow">http://apps.facebook.com/insideny/</a></p> <p>でFBのキャンバスアプリを持っているFB.Login

は、私は次のロジックを使用しているFacebookのJavascriptのSDKを実装しているので:

1)FBのAPI

FB.init({ 
    appId: 'XXXXXXXXXXXXXX', 
    xfbml: true, 
    cookie: true, 
    oauth : true, 
    channelUrl: 'http://www.niteflymobile.com/insideny/channel.html' }, 
    {scope: 'email'}); 
を初期化)、ログイン状態の確認を

FB.getLoginStatus(function(response) { ... }) 

3)ユーザーがログインしている場合(response.status == "connected")、適切なCookieを設定し、ログインしたページにリダイレクトします。 HERE

4)問題がのResponse.Status場合IS WHERE IS!= "接続" {(通常は、新規ユーザーのために、 "not_authorized" を返す)、その後FB.login(機能(応答への呼び出しを発射)... })。

4A)FB.loginは、以下のタイプの2つのエラーで戻ってくる:URLのstatic.ak.fbcdn.net/connect/xd_proxy.php?version=3 &でフレームにアクセスするための

「安全でないJavaScriptの試みERROR_REASON = user_denied &エラー= &ましたerror_description = +ユーザーをACCESS_DENIED + + +あなたの要求。#1 CB = f22684144 &起源=のhttp%3A%2F%2Fwww.niteflymobile.com%2Ff185641ad8 &関係=オープナー&輸送=のpostMessage &フレームを否定= f39056acd8というURLのフレームから取得します。ドメイン、プロトコル、ポートは一致する必要があります。

ます(http:新規ユーザーのためのSOのルールを遵守する両方のリンクから//を削除)

と私はコンソールに書いたオブジェクトが返されるだけではヌルauthResponseが含まれているとは対照的に、ステータスが「不明」であります"not_authorized"にはちょうど一瞬前です。

ここでの中核となる問題は、承認のためのポップアップが起動しても空白になり、ユーザーの操作なしですばやく閉じられることです。

私はこのことに対してかなり頭を抱えていましたが、私はあまりにも深いので、私はちょうど私が見ることができない愚かな間違いを疑う。

サンドボックスモードを削除しましたが、これが原因である可能性がありますか?

下記に記入CODE:

 $('.fb_link').click(function() { 
      FB.init({appId: 'XXXXXXXXXX', xfbml: true, cookie: true, oauth : true, channelUrl: 'http://www.niteflymobile.com/insideny/channel.html' },{scope: 'email'}); 
       //setup fb login check 
       FB.getLoginStatus(function(response) { 
        if(response) { 
         console.log(response); 
        if(response.status == "connected") { 

          alert(response.status); 
          alert(response.authResponse.userID+"preajax"); 
          //jquery cookie write 
          $.cookie('fbID', response.authResponse.userID, { expires: 29, path: '/' }); 
          //secondary cookie write using only javascript 
          createCookie('fbID', response.authResponse.userID, 29); 
          //bandaid to fire ajax to set cookie on server side if the js side fails 
          var fbID_check = readCookie('fbID'); 
          if(fbID_check) { 
           alert("fbID cookie set "+fbID_check); 
           window.location = "http://apps.facebook.com/insideny/"; 
          } 
          else { 
           url_vars = "fbID="+response.authResponse.userID; 
           $.ajax({ 
            type: "POST", 
            url: "set_fb_cookie.php", 
            data: url_vars, 
            success: function(data){ 

             alert(data + "passed back from ajax"); 
             var fbID_check_2 = readCookie("fbID"); 
             alert(fbID_check_2 + "read from cookie"); 
             window.location = "http://apps.facebook.com/insideny/"; 
            } 

           }); 
           return false; 
          } 

          alert(response.authResponse.userID+"postajax"); 

         } 

         else { 

          FB.login(function(response) { 
           alert('here'); 
           console.log(response); 

          }); 
         } 
        } 

       }) 
      }) 

UPDATE 8.12フェリペ・ブラマ

@は同じ効果(ポップアップしますが、空白で、ダウンクローズ)

$('.fb_link').click(function() { 
    FB.init({appId: 'XXXXXXXXXXXXX', xfbml: true, cookie: true, oauth : true,   channelUrl: 'niteflymobile.com/insideny/channel.html'; },{scope: 'email'}); 
    FB.login(function(response) { 
    console.log(response); }) 
    }) 
+0

説明だけでなく、完全なコードを投稿できますか? – Einacio

+0

完全なコードが追加されました –

+0

Developerアプリにあるアプリ設定でoauth 2.0が有効になっていますか? –

答えて

0

と、次のコードを試してみました「フレームにアクセスするための安全でないJavaScriptの試み...」は本当に重要ではありません。私のアプリのショーはコンソール上で同じエラーですが、まだ動作します。

ほとんどのブラウザでは、ユーザーが開始したイベントによってwindow.openイベントが発生する必要があります。つまり、をクリックすると、イベントが表示されます。

解決策:ログイン機能を呼び出すリンクをクリックするようにユーザーに指示する必要があります。

+0

今すぐクリックイベントに間接的に結び付けられます。私はちょうどclickイベントに直接結びつけようとしましたが、それは同じように起動します。空白のウィンドウはすぐに終了し、2つのXSSエラーが発生します。 –

+0

しかし、コールバックが完了する前にclickイベントで直接呼び出されなければなりません。 FB.loginStatusのコールバックで呼び出すため、FB.loginはクリックイベントで呼び出されません。FB.loginStatusはFB.initのコールバックの内側にあります。そのコードは非同期なので、FB.loginを呼び出すことはできませんクリックイベント。 –

+0

試しに更新されていませんでした。同じ効果がありました(空白のポップアップとXSSエラー) –

関連する問題

 関連する問題