X-Frame-Options Facebook Canvas SDK PHP Login Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • X-Frame-Options Facebook Canvas SDK PHP Login Problem

    Hallo,

    ich versuche meine Problematik mal zu erklären und hoffe das es ein gibt der hier eine Lösung ggf. mir irgendwie helfen kann.

    Also ich bin dabei eine Facebook app einzurichten, die beinhaltet nun meine website. Die Einstellungen soweit sind alle gemacht und hier mal der Code:
    PHP-Code:
    session_start();

    header("Content-Type: text/html; charset=utf-8");
    header('P3P: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');

    $app_id             'xxx';  //Facebook App ID
    $app_secret         'xxx'//Facebook App Secret
    $required_scope     'public_profile,email';//'public_profile, publish_actions, email'; //Permissions required
    $redirect_url       'https://www.meinesite.com/fb/index.php'//FB redirects to this page with a code

    require_once __DIR__ "/facebook-php-sdk-v4-4.0-dev/autoload.php";

    use 
    Facebook\FacebookSession;
    use 
    Facebook\FacebookRequest;
    use 
    Facebook\GraphUser;
    use 
    Facebook\FacebookRedirectLoginHelper;

    FacebookSession::setDefaultApplication($app_id $app_secret);
    $helper = new FacebookRedirectLoginHelper($redirect_url);

    try {
      
    $session $helper->getSessionFromRedirect();
    } catch(
    FacebookRequestException $ex) {
        die(
    " Error : " $ex->getMessage());
    } catch(\
    Exception $ex) {
        die(
    " Error : " $ex->getMessage());
    }


    if (
    $session){ 
        
    $user_profile = (new FacebookRequest($session'GET''/me'))->execute()->getGraphObject(GraphUser::className());

    //WENN USER EINGELOGT IST
       
    }else{
    $login_url $helper->getLoginUrl( array( 'scope' => $required_scope ) );
    echo
    "<script>top.location.href='".$login_url."'</script>";

    Nun wie man vielleicht sieht läd er die login URL via top.location.href Dies hat aber zu folge das die Seite aus Facebook raus springt. ABER!!! Wenn ich das nicht habe, und jemand hatte die App noch nie betreten und die erforderlichen rechte nicht Akzeptiert. dann bekomme ich eine Blanke seite / Frame mit dem Fehler

    FireFoxConsole
    "Load denied by X-Frame-Options: URL does not permit framing"

    ChromeConsole:

    Invalid 'X-Frame-Options' header encountered when loading 'https://www.meineSeite.com/fb/': 'GOFORIT' is not a recognized directive. The header will be ignored.
    (index):1 Refused to display 'https://www.facebook.com/v2.3/dialog/oauth?client_id=1662254424008050&redir…5989030898f90d082895410739&sdk=php-sdk-4.0.23&scope=public_profile%2Cemail' in a frame because it set 'X-Frame-Options' to 'DENY'.

    Habe es im übrigen auch mit "SAMEORIGIN" schon Probiert dann kommt der Fehler

    FireFoxLoad denied by X-Frame-Options: https://www.meineSeite.com/fb/ does not permit cross-origin framing.

    Chrome
    Refused to display 'https://www.meineSeite.com/fb/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.


    Ist aber ein User bereits mit den Rechten ausgestattet ggf. in der App angemeldet, so funktioniert es ohne "top."location.href und das er innerhalb von Facebook bleibt im Frame... Also liegt es scheinbar darin das er den Facebook Popup aufbaut für die Rechte befragung.

    Jetzt meine Frage, wie könnte man das lösen? gibt es eine möglichkeit vorher die rechte zu prüfen ohne das man die $helper->getLoginUrl( ) nutzen muss um vielleicht ne art weiche zu stellen. oder wisst ihr vielleicht eine simple lösung?

    Habe einiges schon ausprobiert und verzweifel so langsam dran. Vielen Dank vor her schon mal

  • #2
    Die URL-Redirect-Variante des Login-Dialogs kann nicht in Frames oder Iframe jedweder Art angezeigt werden (aus Sicherheitsgründen). Du musst also per top.location.href erst mal aus dem Canvas „raus“, wenn du den Login-Dialog auf diese Weise aufrufen willst, dann führt da kein Weg dran vorbei.

    Komfortabler und nutzerfreundlicher wird es, wenn du für den Login das JS SDK verwendest (Methode FB.login) – das erzeugt, wenn du dich „innerhalb“ von Facebook befindest, wie das mit einer Canvas-App der Fall ist, lediglich einen Overlay-Dialog, ohne die angezeigte Seite überhaupt zu verlassen.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar

    Lädt...
    X