Bonjour,
Je rencontre un souci pour une connexion FB avec Facebook, j'ai créé 2 methodes, une qui permet d'obtenir "getLoginUrl" dans ma vue Twig et une qui doit me permettre d'obtenir un "AccessToken", mais lorsque que je click sur le lien, je n'ai aucune demande de validation pour la connexion FB ni aucune erreur en retour.
L'appId et l'appSecret sont bien remis, je l'ai ai retiré pour les garder privé :)
Method me permettant de retourner le "getLoginUrl" a ma vue:
/**
* @Route("/facebook-connect", name="_facebook_connect")
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* @throws \Facebook\Exceptions\FacebookSDKException
*/
public function facebookConnectAction(){
$fb = new Facebook([
'app_id' => "",
'app_secret' => "",
'default_graph_version' => 'v2.12',
]);
$oauth= $fb->getOAuth2Client();
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email'];
$loginUrl = $helper->getLoginUrl($this->redirectToRoute("_facebook_connect_callback"), $permissions);
return $this->redirectToRoute("_public_login", compact("loginUrl"));
}
Method me permettant de récupérer "l'accessToken":
/**
* @Route("/facebook-connect/callback", name="_facebook_connect_callback")
* @throws \Facebook\Exceptions\FacebookSDKException
*/
public function facebookConnectCallbackAction(){
$fb = new Facebook([
'app_id' => "",
'app_secret' => "",
'default_graph_version' => 'v2.12',
]);
$helper = $fb->getRedirectLoginHelper();
try {
$accessToken = $helper->getAccessToken();
} catch (\Exception $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch (\Exception $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('{app-id}'); // Replace {app-id} with your app id
// 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 (\Exception $e) {
echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n";
exit;
}
}
}
Vue Twig pour la connexion:
{% extends "front/layout.html.twig" %}
{% block metaDescription %}
page de connexion
{% endblock %}
{% block title %}
Connexion
{% endblock %}
{% block content %}
<div class="content">
<div class="row">
<div class="col-sm-4 col-sm-offset-4">
<div class="page-title">
<h1>Connexion</h1>
<a href="{{ url('_facebook_connect') }}">se connecter avec Facebook</a>
</div>
{% if error %}
<div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
<form method="post" action="{{ path('_login_check') }}">
<div class="form-group">
<label for="mail">E-mail</label>
<input type="email" class="form-control" name="_username" id="mail" value="{{ last_username }}" />
</div>
<div class="form-group has-error has-feedback">
<label for="password">Mot de passe</label>
<input type="password" class="form-control" name="_password" id="password" />
<span class="fa fa-times form-control-feedback"></span>
</div>
<button type="submit" class="btn btn-primary pull-right">Connexion</button>
</form>
</div>
</div>
</div>
{% endblock %}
Merci d'avance pour vos réponses