php - Facebook connect not redirecting properly all of sudden -
did facebook randomly change api on last couple of days? had site working facebook api , of sudden doesn't work @ all. no, haven't changed anything, literally decided yesterday not redirect anymore...it seems try connect few times , displays page:
"the page isn't redirecting firefox has detected server redirecting request address in way never complete. * problem can caused disabling or refusing accept cookies."
anyway, here code wrap heads around :p (yes, have real app id's , such in place) fblogin_member.php file you're directed after clicking on login link:
$app_id = "my id #"; $app_secret = "my secret id"; $my_url = "http://www.sitedomain.com/confirmlogin_fb_member.php"; if (empty($code)) { $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=". $app_id ."&redirect_uri=". urlencode($my_url) ."&scope=email"; echo "<script> top.location.href='". $dialog_url ."'</script>"; } $code = $_request['code']; here confirmlogin_fb_member.php file:
//if user denies access website, take him manual login page // if ($_get['error']) { // header("location: memberlogin.php"); // exit; // } require_once('config/dbconfig.php'); $app_id = "my id #"; $app_secret = "my secret id"; $my_url = "http://www.sitedomain.com/confirmlogin_fb_member.php"; $code = $_get['code']; $token_url = "https://graph.facebook.com/oauth/access_token?client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) . "&client_secret=" . $app_secret . "&code=" . $code; // request access token //use curl , not file_get_contents() $ch = curl_init(); curl_setopt($ch, curlopt_header, 0); curl_setopt($ch, curlopt_url, $token_url); curl_setopt($ch, curlopt_returntransfer, 1); curl_setopt($ch, curlopt_timeout, 30); curl_setopt($ch, curlopt_ssl_verifypeer, false); $access_token = curl_exec($ch); curl_close($ch); $graph_url = "https://graph.facebook.com/me?" . $access_token; // request user data using access token $ch = curl_init(); curl_setopt($ch, curlopt_header, 0); curl_setopt($ch, curlopt_url, $graph_url); curl_setopt($ch, curlopt_returntransfer, 1); curl_setopt($ch, curlopt_timeout, 30); curl_setopt($ch, curlopt_ssl_verifypeer, false); $temp_user = curl_exec($ch); curl_close($ch); //decode json array user data $user = json_decode($temp_user); //store user data $u = $user->name; $e = $user->email; $fb_id = $user->id; $username = $user->username; $picture = 'https://graph.facebook.com/'. $fb_id .'/picture'; //check if user has signed before $insert = true; $result = mysql_query("select * members") or die(mysql_error()); while ($row = mysql_fetch_array($result)) { //if username exists, not insert if (($row['name'] == $u) && ($row['usertype'] == "facebook_user")) { $insert = false; } } // random password generator $chars = "abcdefghijkmnopqrstuvwxyz023456789"; srand((double)microtime()*1000000); $i = 0; $pass = '' ; while ($i <= 7) { $num = rand() % 33; $tmp = substr($chars, $num, 1); $pass = $pass . $tmp; $i++; } // end generator // if new user, insert user details in mysql table if ($insert) { mysql_query("insert members(name, fb_username, password, email, profile_pic, usertype) values('$u', '$username', '$pass' , '$e', '$picture', 'facebook_user')") or die(mysql_error()); } //login user if (!session_start()) session_start(); $_session['in'] = true; $_session['username'] = $u; $_session['usertype'] = "facebook_user"; $_session['useremail'] = $e; //take user his/her homepage header("location: layout.php"); lastly, here top of layout.php facebook api session called:
session_start(); require_once('config/dbconfig.php'); require_once('facebook/facebook.php'); if (isset($_request['logout'])) { unset($_session['in']); unset($_session['username']); unset($_session['usertype']); unset($_session['useremail']); session_destroy(); header("location: layout.php"); } $session = $_session['in']; if (!$session) { $login = '<a href="fblogin_member.php" class="fblogin">login facebook</a>'; $tooltipmsg = '<p>you must <strong>log in</strong> vote.</p>'; } else { $sessionuser = $_session['username']; $result = mysql_query("select * `members` name = '$sessionuser'") or die('query failed: ' . mysql_error() . "<br />\n$sql"); if ($result) { $sessionrow = mysql_fetch_array($result); $sessionuserid = $sessionrow['memberid']; } if ($sessionrow['usertype'] == "facebook_user") { $facebook = new facebook(array( 'appid' => 'my app id #', 'secret' => 'my secret id', 'cookie' => true )); // $session = $facebook->getsession(); $user = $facebook->getuser(); $me = null; // session based api call. if ($user) { try { $me = $facebook->api('/me'); } catch (facebookapiexception $e) { // error_log($e); } } } it boggles mind has worked fine couple weeks, , when come home being gone day , half doesn't work. appreciated, if there other things wrong see coding (this first attempt facebook api) :)
it sounds might have infinite redirect problem?
you checking see if $code set before assigning it, try flipping order of these 2 statements:
$code = $_request['code'];
if (empty($code)) { $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=". $app_id ."&redirect_uri=". urlencode($my_url) ."&scope=email"; echo " top.location.href='". $dialog_url ."'"; }
Comments
Post a Comment