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 FacebookFacebookSession;
use FacebookFacebookRequest;
use FacebookGraphUser;
use FacebookFacebookRedirectLoginHelper;
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…5989030898f 90d082895410739&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
FireFox Load 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