Facebook SDK devolvió un error: Falló la validación de falsificación de solicitudes entre sitios. El parámetro" state " de la URL y la sesión no coinciden


Estoy tratando de obtener el id de usuario de Facebook usando el sdk de php de esta manera

$fb = new Facebook\Facebook([
    'app_id' => '11111111111',
    'app_secret' => '1111222211111112222',
    'default_graph_version' => 'v2.4',
]);

$helper = $fb->getRedirectLoginHelper();


$permissions = ['public_profile','email']; // Optional permissions
$loginUrl = $helper->getLoginUrl('http://MyWebSite', $permissions);

echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';


    try {
        $accessToken = $helper->getAccessToken();
        var_dump($accessToken);
    } catch (Facebook\Exceptions\FacebookResponseException $e) {
        // When Graph returns an error
        echo 'Graph returned an error: ' . $e->getMessage();
        exit;
    } catch (Facebook\Exceptions\FacebookSDKException $e) {
        // When validation fails or other local issues
        echo 'Facebook SDK returned an error: ' . $e->getMessage();
        exit;
    }

    if (!isset($accessToken)) {
        if ($helper->getError()) {
            header('HTTP/1.0 401 Unauthorized');
            echo "Error: " . $helper->getError() . "\n";
            echo "Error Code: " . $helper->getErrorCode() . "\n";
            echo "Error Reason: " . $helper->getErrorReason() . "\n";
            echo "Error Description: " . $helper->getErrorDescription() . "\n";
        } else {
            header('HTTP/1.0 400 Bad Request');
            echo 'Bad request';
        }
        exit;
    }

// Logged in
    echo '<h3>Access Token</h3>';
    var_dump($accessToken->getValue());

// The OAuth 2.0 client handler helps us manage access tokens
    $oAuth2Client = $fb->getOAuth2Client();

// Get the access token metadata from /debug_token
    $tokenMetadata = $oAuth2Client->debugToken($accessToken);
    echo '<h3>Metadata</h3>';
    var_dump($tokenMetadata);

// Validation (these will throw FacebookSDKException's when they fail)
    $tokenMetadata->validateAppId($config['11111111111']);
// If you know the user ID this access token belongs to, you can validate it here
//$tokenMetadata->validateUserId('123');
    $tokenMetadata->validateExpiration();

    if (!$accessToken->isLongLived()) {
        // Exchanges a short-lived access token for a long-lived one
        try {
            $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
        } catch (Facebook\Exceptions\FacebookSDKException $e) {
            echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n";
            exit;
        }

        echo '<h3>Long-lived</h3>';
        var_dump($accessToken->getValue());
    }

    $_SESSION['fb_access_token'] = (string)$accessToken;

Pero me da este error:

Facebook SDK returned an error: 
Cross-site request forgery validation failed. 
The "state" param from the URL and session do not match.

Por favor cualquier ayuda soy nuevo en php y Facebook sdk gracias por cualquier ayuda de antemano.

Author: Fadi, 2015-08-15

24 answers

Descubrí que mientras habilite las sesiones de PHP antes de generar la url de inicio de sesión, y en la parte superior del script al que Facebook eventualmente redirige, funciona bien por sí solo sin configurar una cookie ( según la respuesta de ale500). Esto está utilizando la versión 5.1 del sdk.

En la parte superior de ambos scripts, agregué...

if(!session_id()) {
    session_start();
}

...y "simplemente funcionó".

Aquí hay un ejemplo completo de barebones que funcionó para me:

Auth.php

if (!session_id()) {
    session_start();
}

$oFB = new Facebook\Facebook([
    'app_id'     => FACEBOOK_APP_ID,
    'app_secret' => FACEBOOK_APP_SECRET
]);

$oHelper = self::$oFB->getRedirectLoginHelper();
$sURL = $oHelper->getLoginUrl(FACEBOOK_AUTH_CALLBACK, FACEBOOK_PERMISSIONS);

// Redirect or show link to user.

Auth_callback.php

if (!session_id()) {
    session_start();
}

$oFB = new Facebook\Facebook([
    'app_id'     => FACEBOOK_APP_ID,
    'app_secret' => FACEBOOK_APP_SECRET
]);

$oHelper = self::$oFB->getRedirectLoginHelper();
$oAccessToken = $oHelper->getAccessToken();
if ($oAccessToken !== null) {
    $oResponse = self::$oFB->get('/me?fields=id,name,email', $oAccessToken);
    print_r($oResponse->getGraphUser());
}

¿Por qué?

Como nota adicional, esto se explica en los documentos sobre el repositorio. Mira la advertencia en esta página.

Advertencia: El FacebookRedirectLoginHelper hace uso de sesiones para almacenar un valor CSRF. Necesita asegurarse de tener sesiones habilitadas antes de invocar el método getLoginUrl (). Esto generalmente se hace automáticamente en la mayoría de los marcos web, pero si si no está utilizando un marco web, puede agregar session_start (); a la parte superior de su inicio de sesión.php & login-callback.scripts php. Puede sobrescribir el manejo de sesión predeterminado-consulte puntos de extensibilidad a continuación.

Estoy agregando esta nota porque es importante tener en cuenta si resulta que está ejecutando su propia administración de sesiones o si está ejecutando varios servidores web en paralelo. En esos casos, confiar en los métodos de sesión predeterminados de php no siempre funcionará.

 83
Author: enobrev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-12 21:42:05

Insértese este código después $helper = f fb - >getRedirectLoginHelper ();

  $_SESSION['FBRLH_state']=$_GET['state'];

Y funcionará o para más detalles visite facebook login apps

 60
Author: zratan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-08 04:13:11

Un montón de grandes respuestas ya mencionadas, aquí está la que me ayudó,

Encontré que el problema es La validación de la falsificación de solicitudes entre sitios falló. Requerido param" estado " falta en el código FB y aquí está la solución

Después de esta línea

$helper = $fb->getRedirectLoginHelper();

Añádase el siguiente código,

if (isset($_GET['state'])) {
    $helper->getPersistentDataHandler()->set('state', $_GET['state']);
}
 43
Author: G.Ashok Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-20 07:25:38

Recibí este error al usar el SDK de Facebook en Symfony2, escribiendo una extensión Twig para mostrar los datos de la API en plantillas.

La solución para mí fue agregar 'persistent_data_handler'=>'session' a la configuración del objeto de Facebook, lo que hace que los datos de estado se almacenen en una clave de sesión en lugar de en la memoria:

$fb = new Facebook\Facebook([
    'app_id' => 'APP_ID',
    'app_secret' => 'APP_SECRET',
    'default_graph_version' => 'v2.4',
    'persistent_data_handler'=>'session'
]);

De forma predeterminada, estaba usando el controlador de memoria integrado, que no funcionaba correctamente para mí. Tal vez porque algunas funciones están siendo llamadas desde dentro de una extensión Twig, como el controlador de memoria funciona cuando se usa el SDK exclusivamente en controladores/servicios normales.

Aparentemente el estado se establece cuando se llama getLoginUrl(), y se recupera cada vez que se llama getAccessToken(). Si el estado guardado devuelve null (porque su controlador de datos no es tan persistente como debería ser), la comprobación de validación del CSRF falla.

Si necesita tratar las sesiones de una manera particular o desea almacenar el estado en otro lugar, también puede escribir su propio controlador con 'persistent_data_handler' => new MyPersistentDataHandler(), utilizando el FacebookSessionPersistentDataHandler como ejemplo.

 20
Author: Fx32,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-01 15:44:13

Esto sucede cuando la biblioteca de Facebook no puede hacer coincidir el param de estado que recibe de Facebook con el que establece, por defecto, en la sesión. Si está utilizando un framework como Laravel, Yii2 o Kohana que implementa su propio almacenamiento de sesiones, es probable que la implementación estándar de sesiones de Facebook no funcione.

Para arreglarlo, necesita crear su propia implementación de PersistentDataInterface utilizando la biblioteca de sesiones de su marco y pasar esto a Facebook\Facebook constructor.

Aquí hay un ejemplo de un controlador de persistencia Laravel de Facebook :

use Facebook\PersistentData\PersistentDataInterface;

class MyLaravelPersistentDataHandler implements PersistentDataInterface
{
  /**
   * @var string Prefix to use for session variables.
   */
  protected $sessionPrefix = 'FBRLH_';

  /**
   * @inheritdoc
   */
  public function get($key)
  {
    return \Session::get($this->sessionPrefix . $key);
  }

  /**
   * @inheritdoc
   */
  public function set($key, $value)
  {
    \Session::put($this->sessionPrefix . $key, $value);
  }
}

Ejemplos de parámetros del constructor:

$fb = new Facebook\Facebook([
  // . . .
  'persistent_data_handler' => new MyLaravelPersistentDataHandler(),
  // . . .
 ]);

Más información aquí: https://developers.facebook.com/docs/php/PersistentDataInterface/5.0.0

 12
Author: George,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-08 04:59:44

Finalmente, mirando el código FB, descubrí que el problema

Falló la validación de la falsificación de solicitudes entre sitios. Requerido param" estado " falta

Y similares son causados por la variable PHP $_SESSION['FBRLH_state'] que por alguna razón "extraña" cuando FB llama al archivo login-callback.

Para resolverlo almaceno esta variable "FBRLH_state" DESPUÉS de la llamada de la función $helper->getLoginUrl(...). Es muy importante hacer solo después de la llamada de esta función debido a está dentro de esta función cuando la variable $_SESSION['FBRLH_state'] está poblada.

A continuación un ejemplo de mi código en el inicio de sesión.php:

$uri=$helper->getLoginUrl($uri, $permissions);
foreach ($_SESSION as $k=>$v) {                    
    if(strpos($k, "FBRLH_")!==FALSE) {
        if(!setcookie($k, $v)) {
            //what??
        } else {
            $_COOKIE[$k]=$v;
        }
    }
}
var_dump($_COOKIE);

Y en el login-callback.php antes de llamar a todo el código FB:

foreach ($_COOKIE as $k=>$v) {
    if(strpos($k, "FBRLH_")!==FALSE) {
        $_SESSION[$k]=$v;
    }
}

Por último, pero no menos importante, recuerde también incluir código para la sesión PHP so..

if(!session_id()) {
    session_start();
}
...
...
...
...
<?php session_write_close() ?>

Espero que esta respuesta pueda ayudarle a ahorrar 8-10 horas de trabajo :) Adiós, Alex.

 8
Author: ale500,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-18 12:34:02

Para mí, el problema era que no estaba ejecutando una sesión antes del script.

Entonces, agregué session_start(); antes de instanciar la clase Facebook.

 7
Author: Nino Škopac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-19 21:55:13

El mismo problema se me ocurrió en laravel 5.4 resolví este problema poniendo

session_start();

En la parte superior del script.

A continuación se muestra el ejemplo de espacio de nombres del controlador laravel para darle un ejemplo de cómo funcionará.

<?php
namespace App\Http\Controllers;
session_start();
use Facebook\Facebook as Facebook;
?>

El problema está ocurriendo porque aún no se ha iniciado, por lo que al agregar inicio de sesión en la parte superior del script, estamos comenzando la sesión.

Espero que pueda ayudar a alguien..

 4
Author: usama,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-25 07:42:12

El objeto Facebook tiene una variable de instancia llamada persistentDataHandler, generalmente una instancia de FacebookSessionPersistentDataHandler, que tiene un método set y get para acceder a las sesiones nativas de PHP.

Al generar la url de devolución de llamada usando:

$loginUrl = $helper->getLoginUrl($callback_url, $permissions);

El método FacebookRedirectLoginHelper->getLoginUrl() creará una cadena aleatoria de 32 caracteres, la añadirá a $loginUrl y la guardará en el código siguiente utilizando el método set de persistentDataHandler.

$_SESSION['FBRLH_' . 'state']

Más tarde, cuando se llame a $helper->getAccessToken();, el parámetro de estado en la url se comparará con el almacenado en el misma sesión para prevenir CSRF. Si no coincide, se lanzará esta excepción.

FacebookSDKException: Falló la validación de la falsificación de solicitudes entre sitios. Requerido param" estado " falta.

Dicho todo esto, debe asegurarse de que su característica de sesión nativa de PHP esté configurada correctamente durante este proceso. Puede comprobarlo, añadiendo

die($_SESSION['FBRLH_' . 'state']);

Después de

$loginUrl = $helper->getLoginUrl($callback_url, $permissions);

Y antes

$accessToken = $helper->getAccessToken();

Para ver si esa cadena de 32 caracteres está ahí.

Esperanza ayuda!

 3
Author: Chao Chen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-22 08:34:07

Recibe este error si su nombre de host de origen es diferente al nombre de host de destino una vez autenticado.

$loginUrl = $helper->getLoginUrl('http://MyWebSite', $permissions);

Con esta declaración, si el visitante en su sitio web utiliza http://www.mywebsite.com / se generará el error cross-site.

Debe asegurarse de que el origen y el nombre de host de destino sean exactamente los mismos, incluido el eventual prefijo www.

Versión fija:

$loginUrl = $helper->getLoginUrl('http://'.$_SERVER['SERVER_NAME'], $permissions);
 2
Author: Jean.R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-03 23:48:59

Simplemente podría hacer esto establecer la sesión con el nuevo estado

<?php
if(isset($_GET['state'])) {
      if($_SESSION['FBRLH_' . 'state']) {
          $_SESSION['FBRLH_' . 'state'] = $_GET['state'];
      }
}
?>
 2
Author: Joshua Bigboy Springman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-15 19:35:08

Con Symfony, no funciona porque la forma en que se administran las sesiones.

Para resolver el problema puede crear un nuevo controlador que funcione con la sesión de symfony.

FacebookDataHandlerSymfony.php:

<?php

use Facebook\PersistentData\PersistentDataInterface;
use Symfony\Component\HttpFoundation\Session\Session;

class FacebookDataHandlerSymfony implements PersistentDataInterface
{

    private $session;

    public function __construct()
    {
        $this->session = new Session();
    }

    public function get($key)
    {
        return $this->session->get('FBRLH_' . $key);
    }

    public function set($key, $value)
    {
        $this->session->set('FBRLH_' . $key, $value);
    }

}

Y cuando creas el objeto FB, solo tienes que especificar la nueva clase :

$this->fb = new Facebook([
            'app_id' => '1234',
            'app_secret' => '1324',
            'default_graph_version' => 'v2.8',
            'persistent_data_handler' => new FacebookDataHandlerSymfony()
        ]);
 2
Author: user4520510,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-15 23:41:56

Esto puede ser un poco tarde, pero espero que ayude a otros ya que este problema aún persiste.

Tuve este problema durante un tiempo y he buscado y he visto muchas soluciones diferentes, muchas de las cuales deshabilitan la comprobación de CSRF. Así que después de todo lo que he leído, esto es lo que funcionó para mí.

Por lo que entiendo, obtienes este error cuando tu URL de redirección no coincide con la que has configurado en la configuración de tu aplicación, por lo que mi problema se solucionó fácilmente, pero también he visto personas tienen problemas por no tener su sesión comenzó correctamente, así que voy a cubrir ambos temas.

Paso 1: Asegúrese de que su sesión haya comenzado cuando sea necesario.

Por ejemplo: fb-config.php

session_start();
include_once 'path/to/Facebook/autoload.php';

$fb = new \Facebook\Facebook([
    'app_id' => 'your_app_id',
    'app_secret' => 'your_secret_app_id',
    'default_graph_version' => 'v2.10'
]);

$helper = $fb->getRedirectLoginHelper();

Si su código de devolución de llamada de facebook está en otro archivo aparte de la configuración, entonces inicie la sesión en ese archivo también.

Por ejemplo: fb-callback.php

session_start();
include_once 'path/to/fb-config.php';

try {
    $accessToken = $helper->getAccessToken();
} catch (\Facebook\Exceptions\FacebookResponseException $e) {
    echo "Response Exception: " . $e->getMessage();
    exit();
} catch (\Facebook\Exceptions\FacebookSDKException $e) {
    echo "SDK Exception: " . $e->getMessage();
    exit();
}

/** THE REST OF YOUR CALLBACK CODE **/

Ahora, lo que resolvió mi problema real.

Paso 3: Configurar su redireccionar URL en la configuración de la aplicación.

En la configuración de la aplicación de inicio de sesión de Facebook, vaya a URIs de redirección de OAuth válidos donde debería haber agregado la url que apunta a su fb-callback.archivo php.

http://example.com/fb-callback.php

AND ALSO

http://www.example.com/fb-callback.php

Luego configure su url de redirección de la siguiente manera.

$redirectURL = "http://".$_SERVER['SERVER_NAME']."/fb-callback.php";
$permissions = ['email'];
$fLoginURL = $helper->getLoginUrl($redirectURL, $permissions);

¿Por qué con y sin www y por qué usar SERVER_NAME?

Debido a que su URI de redirección válida de OAuth debe coincidir con su url de redirección en su código y si en la configuración de la aplicación solo establece su OAuth redirect as http://example.com/fb-callback.php y configura tu redirec redirectUrl como http://example.com/fb-bacllback.php para que coincida, pero el usuario entró en su sitio como http://www.example.com entonces el usuario obtendrá el error Facebook SDK: Cross-site request forgery validation failed. Requerido param "estado" que falta en los datos persistentes porque la URL en la que se encuentra el usuario, no coincide EXACTAMENTE con lo que ha configurado. ¿Por qué? No tengo miedo idea.

Mi enfoque lo hace así si el usuario entra en su sitio como http://example.com o http://www.example.com , siempre coincidirá con lo que configuraste en la configuración de la aplicación. ¿Por qué? porque $_SERVER ['SERVER_NAME'] devolverá el dominio con o sin www dependiendo de cómo el usuario haya introducido la url en el navegador.

Estos son mis hallazgos y esto es lo único que funcionó para mí sin eliminar la comprobación de CSRF y hasta ahora, no hay problemas.

I espero que esto ayude.

 2
Author: BlueSun3k1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-05 18:57:06

Arreglo fácil para mí. Cambié:

$loginUrl = $helper->getLoginUrl('http://www.MYWEBSITE.ca/index_callback.php', $permissions);

A:

$loginUrl = $helper->getLoginUrl('http://MYWEBSITE.ca/index_callback.php', $permissions);

Eliminar el 'www' solucionó el problema.

 1
Author: Mathieu Wilson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-27 21:23:06

En mi caso he comprobado error y encontrado error que me llevan a la solución con la ejecución de código:

date_default_timezone_set('Europe/Istanbul');

Antes del script. Funcionó a las mil maravillas. Para comprobar su ubicación: zonas horarias.Europa.php

 1
Author: Roman Losev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-28 17:27:09

El error se activa si el nombre de host de origen es diferente del nombre de host de destino [como Souch mencionó]. Cuando los visitantes escribieron en el cuadro de dirección URL como " http://website.com "eso es diferente de" http://www.website.com ". Los redirigimos a la URL correcta, agregando los siguientes códigos en la posición superior antes de session_start ().

  if($_SERVER['HTTP_HOST']!=='www.website.com'){
  header('location: http://www.website.com');
  }
 0
Author: Piya Poonsawat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-23 03:59:53

Yii2 solución que funciona para mí:

use Facebook\PersistentData\PersistentDataInterface;
use Yii;

class PersistentDataHandler implements PersistentDataInterface
{
    /**
     * @var string Prefix to use for session variables.
     */
    protected $sessionPrefix = 'FBRLH_';

    public function get($key)
    {
        return Yii::$app->session->get($this->sessionPrefix . $key);
    }

    public function set($key, $value)
    {
        Yii::$app->session->set($this->sessionPrefix . $key, $value);
    }
}
 0
Author: zibra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-06 12:28:43

Tuve el mismo error, porque olvidé agregar " www."a la dirección del remitente. En la configuración de Client-OAuth debe haber un nombre correcto.

 0
Author: Umbrella Brothers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-09 16:39:23

Este es un problema común que muchas personas enfrentan en la Api de FB. esto es solo un problema de SESIÓN. Para resolver este problema, agregue un código como.

En el script de devolución de llamada normalmente fb-devolución de llamada.php agrega "session_start ();" justo antes de incluir el archivo de carga automática de facebook. y luego " _ _SESSION ['FBRLH_state']= _ _GET['state'];" después de la línea "helper helper = f fb->getRedirectLoginHelper ();".

Ejemplo:

<?php 
session_start();
include 'vendor/autoload.php';
include 'config.php'; /*Facebook Config*/
$helper = $fb->getRedirectLoginHelper();
$_SESSION['FBRLH_state']=$_GET['state'];
try {
  $accessToken = $helper->getAccessToken();
} ?>
 0
Author: Er Prabhjot Singh Tugger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-30 07:02:21

Podría ayudar a alguien, que está utilizando Javascript Helperen frontend para autenticar al usuario y en PHP uno está tratando de extraer access_tokende Redirect Login Helper. Así que utilice siguiente

getJavaScriptHelper();

En lugar de

getRedirectLoginHelper();
 0
Author: makki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-24 23:01:04

SOLUCIÓN PARA PROBLEMAS INTERMITENTES

Estaba a) redirigiendo al enlace de inicio de sesión de Facebook, b) redirigiendo desde el inicio de sesión.php a main.php. Los usuarios viajarían a main.php y algunas otras páginas, luego haga clic en volver atrás en el navegador.

Eventualmente, golpearían login.php con un montón de creds publicado, pero Facebook elimina el $_SESSION['FBRLH_state'] después de un solo éxito, así que aunque tenía el correcto $_GET['estado'], sería el error.

La solución es una) rastrea internamente si el usuario ha iniciado sesión y evita repetir la lógica de Facebook en el inicio de sesión.php, O b) realizar un seguimiento de todos los parámetros de estado recientemente válidos para ese usuario en particular (en una sesión tal vez) que fueron establecidos por Facebook y si el array _GET['state'] está en esa matriz, entonces haga esto:

$_SESSION ['FBRLH_state'] = {_GET['state'];

En este caso puede hacer esto de forma segura sin romper la protección CSRF.

 0
Author: Phyllis Sutherland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-29 15:21:25

Para mí establecer el estado de la sesión funcionó

Código completo (en la url de redirección php )

$accessToken = '';

$helper = $fb->getRedirectLoginHelper();

if(isset($_GET['state'])){

    $_SESSION['FBRLH_state']=$_GET['state'];
}


try {
    $accessToken = $helper->getAccessToken();
} catch ( Facebook\Exceptions\FacebookResponseException $e ) {
    // When Graph returns an error
    echo 'Graph returned an error: ' . $e->getMessage();

}
 0
Author: digitalzoomstudio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-13 19:12:09

Si sigues viendo el error, simplemente limpia la caché de tu navegador. Cuando he solucionado el problema usando la solución enobrev, continuaba experimentando el error. Después de un tiempo he entendido que tenía que limpiar la caché y después de que he reiniciado el navegador funcionó!

 0
Author: fancoolo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-19 16:02:17

Para mí el problema era diferente; (Yo era estúpido) Tuve una ventana emergente con inicio de sesión de Facebook y nuevamente botones de inicio de sesión de Facebook en la página de inicio de sesión/Registro.

  • Cada vez que hago clic en el botón de Facebook en la ventana emergente de otras páginas funcionó bien.
  • Pero, cuando hago clic en el botón de Facebook en la ventana emergente de la página de inicio de sesión/Registro, no funcionaría.

La razón era que había vuelto a instanciar los objetos de Facebook y getRedirectLoginHelper. Tuve que comentar estas declaraciones en las páginas de inicio de sesión/Registro, ya que ya estaba disponible.

$_SESSION['FBRLH_state']=$_GET['state'];

No Es el camino a seguir. Aunque funcionó.

 -1
Author: Suriya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-13 08:44:11