Salut alors voila, j'ai deja regarder la vidéo de grafikart sur le connexion avec facebook sur cakephp, mais cette video est un peu vieille et l'api de facebook a évoluer.
J'ai esseyer de l'integrer dans mon projet cakephp mais je n'y arrive pas.

Tout d'abord dans ma vue de connexion j'ai mit un lien qui pointe vers l'action facebooklogin() de mon UsersController

Dans mon UsersController j'ai deux fonction:
la premiere facebooklogin(), qui est appeler en cliquant sur le lien de connexion facebook :

public function facebooklogin() {
        $fb = new Facebook([
            'app_id' => 'Mon id',
            'app_secret' => 'Mon secret',
            'default_graph_version' => '2.4'
        ]);

        $helper = $fb->getRedirectLoginHelper();
        $permission = ['email', 'public_profil'];
        $loginUrl = $helper->getLoginUrl('http://localhost/melissa/users/facebook_login', $permission);
        $this->redirect($loginUrl);
    }

et une autre fonction qui est appeler par l'api facebook (normalement) et qui se charge d'enregistrer et de connexter l'utilisateur.

public function facebook_login() {
        $fb = new Facebook([
            'app_id' => 'Mon id',
            'app_secret' => 'mon secret',
            'default_graph_version' => '2.4'
        ]);

        $helper = $fb->getRedirectLoginHelper();
        try {
            $accessToken = $helper->getAccessToken();
        } catch (FacebookSDKException $e) {
            $this->Flash->set("Erreur de Facebook");
            return $this->redirect(['action' => 'login']);
        }

        if (isset($accessToken)) {
            $this->request->session()->write('facebook_access_token', $accessToken->getValue());
            $res = $fb->get('/me');
            $user = $res->getGraphNode();
            die(debug($user->getField('id')));
        }
    }

Le probleme c'est que j'ai une erreur qui me dit que la session n'est pas active, j'ai donc esseyer de faire un session_start() au debut de mon index.php mais du coup quand je veut me connecter avec google j'ai une erreur que je n'avait pas avant et qui me dit que la session est deja demarer. J'imagine qu'il faut donc que je trouve un autre endroit pour faire le session_start.

De plus si je laisse le session_start ert que je clique sur connexion avec facebook ca ne marche pas et ca me redirige vers une page de facebook me disant que cette page n'existe pas. J'ai donc du me tromper quelque part mais je ne c'est pas ou j'espere que quelqun pourrat m'aider.
Merci d'avance

1 réponse


Bonjour.
Au lieu de session_start, utilises plutôt la méthode renew de l'objet Session dans ta fonction.
Ce qui aura pour effet de démarrer une session, voir ici : [Session » Faire une Rotation des Identificateurs de Session](Faire une Rotation des Identificateurs de Session).