wp-facebook-connect – login process failed
Do wordpressa można zainstalować wtyczkę pozwalającą pobrać dane z facebooka i zarejestrować użytkownika. Wtyczka ta to wp-facebook-connect. Ustawienia serwera mogą zablokować działanie wtyczki. Do pobierania danych z Facebooka stosowana jest funkcja file_get_contents, co przy zablokowanych zdalnych adresach (allow_url_fopen=off) zakończy się wyświetleniem komunikatu „Facebook Connect error: login process failed!„. Do obejścia tego problemu należy zastosować obejście.
W pliku functions.php znajdujemy linijkę z $user = json_decode( … ) i zamieniamy ją na:
$user = json_decode(get_facebook_user($cookie['access_token'] ));
Następnie dodajemy odpowiednią funkcję:
function get_facebook_user( $cookie ) { $url = 'https://graph.facebook.com/me?access_token=' . $cookie ; // dla wersji z curl $content = ""; $header = "not yet"; $fp = fsockopen("ssl://graph.facebook.com", 443, $errno, $errstr, 30); if (!$fp) { // echo "$errstr ($errno)<br />\n"; } else { $out = "GET /me?access_token=".$cookie." HTTP/1.1\r\n"; $out .= "Host: graph.facebook.com\r\n"; $out .= "Connection: Close\r\n\r\n"; $result = fwrite($fp, $out); while (!feof($fp)) { $line = @fgets($fp, 128); if( $line == "\r\n" && $header == "not yet" ) { $header = "passed"; } if( $header == "passed" ) { $content .= $line; } } fclose($fp); } return $content ; }
To powinno rozwiązać problem z brakiem połączenia z Facebookiem.
Funkcję można rozbudować o curl, sockety i file_get_contents. W razie braku określonego modułu w php, lub blokady odpowiedniej funkcji będzie można wypróbować inne rozwiązanie.
Dopisek (4 III 2011)
Można także użyć wp_remote_get, który zawiera w sobie metody pozwalające wybrać działający mechanizm łączenia się z zewnętrznymi adresami.
Dodaj komentarz