#php #facebook #sdk #facebook-php-sdk #facebook-login
#php #Facebook #sdk #facebook-php-sdk #facebook-login
Вопрос:
У меня возникли проблемы с моим входом в Facebook с использованием PHP SDK.
У меня есть оператор if else для переменных сеанса, поскольку я также использую этот логин для хранения информации о пользователе в БД, такой как имя, адрес электронной почты и 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 FacebookFacebookSession;
use FacebookFacebookRedirectLoginHelper;
use FacebookFacebookRequest; use FacebookFacebookResponse;
use FacebookFacebookSDKException;
use FacebookFacebookRequestException;
use FacebookFacebookAuthorizationException;
use FacebookGraphObject;
use FacebookGraphUser;
use FacebookEntitiesAccessToken;
use FacebookHttpClientsFacebookCurlHttpClient;
use FacebookHttpClientsFacebookHttpable;
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 ) amp;amp; 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>";
}
Комментарии:
1. Я думаю, с первой попытки нет переменной $session set. Но перед перезагрузкой для $session установлено значение null. Теперь это будет подхвачено вашими операторами if при следующей перезагрузке, а не при первой попытке.
2. Я не могу понять, как я могу распознать его с первого раза, поскольку пользователь просто делает то же самое, просто нажимая на кнопку входа с помощью fb. @LarsMertens
3. Не уверен, что вам нужна эта проверка перед установкой $session. if ( isset( $_SESSION ) amp;amp; isset( $_SESSION[‘fb_token’] ) )
4. @LarsMertens попытался удалить оператор if, но результаты все те же. Я не могу понять, почему при 2-м входе в систему он становится успешным, и я просто не могу этого допустить, поскольку пользователи могут быть разочарованы этим.
5. Вы только что раскрыли здесь свой идентификатор приложения и секрет, что означает, что у всех теперь есть действительный токен доступа к приложению для вашего приложения. Итак, самое первое, что вам нужно сделать сейчас, это сбросить секрет вашего приложения через панель управления приложением.
Ответ №1:
Теперь это можно закрыть. Исправлено все с помощью последней версии Facebook PHP SDK. Спасибо!