Symfony4 + Facebook-SDK - Как интегрироваться? - PullRequest
1 голос
/ 12 июля 2020

У меня обычная аутентификация для логина и пароля.

Я хочу создать кнопку и использовать facebook / graph-sdk для создания аутентификации для facebook в моем приложении в symfony4.

Я знаю как создать его в simle PHP, но я не знаю, как добавить его в свой проект symfony.

Ну, я использую

composer require facebook/graph-sdk

И как интегрировать его для использования в моих контроллерах?

В моем приложении есть кнопка и ссылка на маршрут «login_facebook».

My SecurityController:

<code><?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorage;
use \Facebook;

if(!isset($_SESSION)){session_start();} 
$session = new Session(new PhpBridgeSessionStorage());
$session->start();

class SecurityController extends AbstractController
{
    /**
     * @Route("/login", name="app_login")
     */
    public function login(AuthenticationUtils $authenticationUtils): Response
    {
        // if ($this->getUser()) {
        //    $this->redirectToRoute('target_path');
        // }

        // get the login error if there is one
        $error = $authenticationUtils->getLastAuthenticationError();
        // last username entered by the user
        $lastUsername = $authenticationUtils->getLastUsername();

        return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
    }

    /**
     * @Route("/login/facebook", name="login_facebook")
     */
    public function loginFacebook()
    {
        $FB = new \Facebook\Facebook([
            'app_id' => '123456789',
            'app_secret' => '1234a56789b0f34a56789b01',
            'default_graph_version' => 'v2.10'
        ]);

        $helper = $FB->getRedirectLoginHelper();

        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();
        }

        if (!$accessToken) {
            return $this->redirectToRoute("home");
            exit();
        }

        $oAuth2Client = $FB->getOAuth2Client();
        if (!$accessToken->isLongLived())
            $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);

        $response = $FB->get("/me?fields=id, first_name, last_name, email, picture.type(large)", $accessToken);
        $userData = $response->getGraphNode()->asArray();
        $_SESSION['userData'] = $userData;
        $_SESSION['access_token'] = (string) $accessToken;
        return $this->redirectToRoute("home");
        exit();

        echo '<pre>';
        echo print_r($_SESSION);
        echo '
'; вернуть новый Response (); } / ** * @Route ("/ logout", name = "app_logout") * / publi c function logout () {throw new \ Exception ('Этот метод может быть пустым - он будет перехвачен ключом выхода на вашем брандмауэре '); }}

Но я не знаю, что делать дальше. В данный момент мое приложение не авторизуется через facebook.

Пожалуйста, помогите мне :)

1 Ответ

0 голосов
/ 12 июля 2020

Хорошо, я решил свою проблему :) Я добавляю к моему URL маршрута "app_login".

Код:

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

        $helper = $fb->getRedirectLoginHelper();

        $permissions = ['email']; // Optional permissions
        $callbackUrl = htmlspecialchars('https://localhost:8000/login/facebook');
        $loginUrl = $helper->getLoginUrl($callbackUrl, $permissions);
return $this->render('security/login.html.twig', [
            'last_username' => $lastUsername, 
            'error' => $error,
            'loginUrl' => $loginUrl,
        ]);

Я не могу удалить этот вопрос. Возможно, это решение поможет другим пользователям.

...