Cross-site request forgery de validation a échoué. Requis param ' “état” manquant Laravel Sammyk/Facebook paquet
Je travaille avec le SammyK/Facebook paquet et confronté à un problème avec facebook connexion sur CSRF. Auparavant, il a bien fonctionné,mais plus tard, j'ai dû désactiver la protection CSRF dans mon kernel.php pour un bon fonctionnement de l'API. Maintenant je l'ai mis à jour et ajouté les lignes ci-dessous dans le middleware
public function handle($request, Closure $next) {
$skip = array(
'api/v1/signup',
'api/v1/login',
'api/v1/addContacts',
'api/v1/email'
);
foreach ($skip as $key => $route) {
//skip csrf check on route
if($request->is($route)){
return parent::addCookieToResponse($request, $next($request));
}
}
return parent::handle($request, $next);
}
Ce qui permet web et une api pour fonctionner comme prévu,mais depuis que je l'avais désactivé le csrf-je obtenir le Cross-site request forgery de validation a échoué. Requis param ' "état" manquant erreur quand je fais un FB login. J'ai essayé de déboguer et trouvé dans le FacebookRedirectLoginHelper la fonction validateCsrf()
ne pas obtenir le savedstate $savedState = $this->persistentDataHandler->get('state');
Je ne suis pas sûr de la façon de résoudre ce que, idéalement, il devrait maintenant fonctionner.J'ai essayé d'imprimer l' $l'état $et savedState et je reçois $savedState comme null.
class FacebookController extends Controller {
public function fbConnect(LaravelFacebookSdk $fb)
{
//Obtain an access token.
try {
$token = $fb
->getRedirectLoginHelper()
->getAccessToken();
} catch (Facebook\Exceptions\FacebookSDKException $e) {
dd($e->getMessage());
}
//Access token will be null if the user denied the request
//or if someone just hit this URL outside of the OAuth flow.
if (! $token) {
//Get the redirect helper
$helper = $fb->getRedirectLoginHelper();
if (! $helper->getError()) {
abort(403, 'Unauthorized action.');
}
//User denied the request
dd(
$helper->getError(),
$helper->getErrorCode(),
$helper->getErrorReason(),
$helper->getErrorDescription()
);
}
OriginalL'auteur KillABug | 2015-05-21
Vous devez vous connecter pour publier un commentaire.
Enfin, en regardant dans FB code, j'ai découvert que le problème de "Cross-site request forgery de validation a échoué. Requis param '“état” manquant" et d'autres similaires sont causés par la variable PHP $_SESSION['FBRLH_state'] que, pour certains, "étrange" raison quand FB appel de la connexion de rappel de fichier.
Pour le résoudre j'ai stocker cette variable "FBRLH_state" APRÈS l'appel de la fonction $aide->getLoginUrl(...). Est très important de faire seulement après l'appel de cette fonction en raison est à l'intérieur de cette fonction lorsque la variable $_SESSION['FBRLH_state'] est rempli.
Ci-dessous un exemple de mon code dans le login.php:
Et dans le login-callback.php avant d'appeler tous les FB code:
Dernier, mais non le moindre, n'oubliez pas également inclure du code PHP session..
J'espère que cette réponse peut vous aider à économiser de 8 à 10 heures de travail 🙂
Bye, Alex.
OriginalL'auteur ale500
Pour ceux qui sont à l'aide de Code de l'Allumeur , vous aurez à chargement automatique de la session de la bibliothèque.
Changer votre application/config/autoload.php les bibliothèques doivent inclure la "session":
OriginalL'auteur italo.portinho
C'est a mon mal de tête, puis j'ai trouvé un moyen facile de le résoudre.
trouver config/session.php et le changement
'expire_on_close' => false,
à
'expire_on_close' => true,
OriginalL'auteur fobus