Facebook登录在第一次尝试获取会话时失败
问题描述:
我在使用PHP SDK的Facebook登录时遇到了问题。Facebook登录在第一次尝试获取会话时失败
我有if else语句的会话变量,因为我也使用这个登录名将用户信息存储到db,比如名字,电子邮件和uid。
问题我第一次登录时,代码将始终为执行脚本的会话执行ELSE语句,该脚本显示“请再次尝试登录”,然后当用户尝试再次登录时,它会成功的。我需要帮助解决这个问题,以便在第一次尝试时识别用户。
href="example.org/fb-redirect.php"
感谢:
而且,我的登录按钮被通过访问!
<?php
include('debug.php');
require_once(dirname(__FILE__)."/templates/initialize.inc");
session_start();
$curtimestamp = date('Y-m-d H:i:s'); // added in v4.0.0
require_once 'fb/autoload.php';
require_once('fb/src/Facebook/GraphUser.php');
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest; use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\Entities\AccessToken;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\HttpClients\FacebookHttpable;
function authoLogin($userLogin){
$global_connection = db_connect();
$userdata = db_getrow("select * from user where user_login like '".$userLogin."'", $global_connection);
db_query("update user set user_loginerror=0 where user_id='".$userdata['user_id']."'", $global_connection);
util_setsessionvar('usertype',$userdata['usertype_id']);
util_setsessionvar('userid',$userdata['user_id']);
util_setsessionvar('userlogin',$userdata['user_login']);
util_setsessionvar('username',$userdata['user_name']);
}
// init app with app id and secret
FacebookSession::setDefaultApplication('appid','secret');
// login helper with redirect_uri
$helper = new FacebookRedirectLoginHelper('http://example.org/fb-redirect.php');
if (isset($_SESSION) && isset($_SESSION['fb_token'])) {
// create new session from saved access_token
$session = new FacebookSession($_SESSION['fb_token']);
// validate the access_token to make sure it's still valid
try {
if (!$session->validate()) {
$session = null;
}
} catch (Exception $e) {
// catch any exceptions
$session = null;
}
}
if (!isset($session) || $session === null) {
// no session exists
try {
$session = $helper->getSessionFromRedirect();
} catch(FacebookRequestException $ex) {
// When Facebook returns an error
// handle this better in production code
print_r($ex);
} catch(Exception $ex) {
// When validation fails or other local issues
// handle this better in production code
print_r($ex);
}
}
// see if we have a session
// see if we have a session
if (isset($session)) {
//store the token in the php session
// graph api request for user data
$request = new FacebookRequest($session, 'GET', '/me');
$response = $request->execute();
// get response
$graphObject = $response->getGraphObject(GraphUser::classname());
$fbid = $graphObject->getProperty('id'); // To Get Facebook ID
$fbfullname = $graphObject->getProperty('name'); // To Get Facebook full name
$femail = $graphObject->getProperty('email'); // To Get Facebook email ID $fgetid=$graphObject->getID(); //get image source from facebook account
$getimgsrc='https://graph.facebook.com/'.$fgetid.'/picture?width=200';
/* ---- Session Variables -----*/
$_SESSION['FBID'] = $fbid;
$_SESSION['FULLNAME'] = $fbfullname;
$_SESSION['EMAIL'] = $femail; $_SESSION['PROFILE_PICTURE']=$getimgsrc; $_SESSION ['form_data']['return_url'] = $_SERVER['HTTP_REFERRER'];
if statement {
//save to database
} else if statement{
}
/* ---- header location after session ----*/
}else{
echo "<script> alert('Please try to login again'); window.location.href='index.php'; </script>";
}
答
现在可以关闭了。通过使用Facebook的PHP SDK的最新版本修复了一切。谢谢!
我猜首先尝试没有变量$ session集。但在重新加载之前,$ session被设置为null。现在它会被你的if语句在下次重新载入时拾取,而不是第一次尝试。 –
我无法弄清楚自用户刚刚做了同样的事情后,如何才能让它第一次识别,只需用fb按钮单击登录即可。 @LarsMertens – Cisco1991
不确定在设置$ session之前你需要检查。 if(isset($ _SESSION)&& isset($ _SESSION ['fb_token'])) –