Войти через Linkedin в Symfony 4.2 - PullRequest
0 голосов
/ 07 февраля 2019

Я работаю над формой, где мне нужно получить данные профиля LinkedIn в полях.

форма находится на нескольких URL, так как у меня есть страница вакансий, где на каждой странице вакансий есть несколько вакансий, есть форма, и мой URL выглядит следующим образом: https://www.xxxxx.com/careers/job1 https://www.xxxxx.com/careers/job2 https://www.xxxxx.com/careers/job3 и у меня есть основнойФорма на https://www.xxxxx.com/careers/ этот URL, а также.Я попробовал какой-нибудь плагин javascript, но обнаружил, что он не работает, и обнаружил, что он не поддерживается сейчас, как указано здесь developer linkedin , затем я попытался сделать это с помощью PHP-скрипта и сделал следующее.

вход через LinkedInкнопка: <a href="{{ linkedinUrl?linkedinUrl:'javascript:;' }}" class="btn linkedin"><span>Use your LinkedIn profile</span></a></p>

Ниже находится мой контроллер, где я извлекаю и устанавливаю данные Linkedin в сеансе для отображения в форме: я вызвал функцию обратного вызова для получения данных Linkedin из API.

    public function careers( Request $request ) {
    $CustomerToken = new JobApplication();
    $session       = new Session();

    $form = $this->createForm( JobApplicationType::class, $CustomerToken );
    if ( ! empty( $_REQUEST['code'] ) ) {
        $user    = $this->linkedinCallback();
        $session = new Session();
        $session->set( 'linkedinUserFirstName', $user->firstName );
        $session->set( 'linkedinUserLastName', $user->lastName );
        $session->set( 'linkedinUserEmail', $user->emailAddress );
    }
    $linkedinUserFirstName = '';
    if ( ! empty( $session->get( 'linkedinUserFirstName' ) ) ) {
        $linkedinUserFirstName = $session->get( 'linkedinUserFirstName' );
    }
    $linkedinUserLastName = '';
    if ( ! empty( $session->get( 'linkedinUserLastName' ) ) ) {
        $linkedinUserLastName = $session->get( 'linkedinUserLastName' );
    }
    $linkedinUserEmail = '';
    if ( ! empty( $session->get( 'linkedinUserEmail' ) ) ) {
        $linkedinUserEmail = $session->get( 'linkedinUserEmail' );
    }
    session_destroy();
    $linkedin['client_id']     = "<client_id>";
    $linkedin['client_secret'] = "<client_secret>";
    $linkedin['redirect_uri']  = "<redirect_uri>";
    $linkedin['csrf_token']    = random_int( 1111111, 9999999 );
    $linkedin['scopes']        = "r_basicprofile%20r_emailaddress";

    return $this->render( 'pages/careers.html.twig', [
        'controller_name'       => 'PagesController',
        'jobApplicationForm'    => $form->createView(),
        'linkedinUrl'           => 'https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id=' . $linkedin['client_id'] . '&redirect_uri=' . $linkedin['redirect_uri'] . '&state=' . $linkedin['csrf_token'] . '&scope=' . $linkedin['scopes'] . '',
        'linkedinUserFirstName' => $linkedinUserFirstName,
        'linkedinUserLastName'  => $linkedinUserLastName,
        'linkedinUserEmail'  => $linkedinUserEmail,
    ] );
}

Моя функция обратного вызова, при которой я получаю данные профиля linkedin.

    public function linkedinCallback() {
    if ( isset( $_REQUEST['code'] ) ) {
        $linkedin['client_id']     = "<client_id>";
        $linkedin['client_secret'] = "<client_secret>";
        $linkedin['redirect_uri']  = "<redirect_uri>";
        $code        = $_REQUEST['code'];
        $url         = "https://www.linkedin.com/oauth/v2/accessToken";
        $params      = [
            'client_id'     => $linkedin['client_id'],
            'client_secret' => $linkedin['client_secret'],
            'redirect_uri'  => $linkedin['redirect_uri'],
            'code'          => $code,
            'grant_type'    => 'authorization_code',
        ];
        $accessToken = $this->curl( $url, http_build_query( $params ) );
        $accessToken = json_decode( $accessToken )->access_token;

        $url  = "https://api.linkedin.com/v1/people/~:(id,firstName,lastName,pictureUrls::(original),headline,publicProfileUrl,location,industry,positions,email-address)?format=json&oauth2_access_token=" . $accessToken;
        $user = file_get_contents( $url, false );

        return ( json_decode( $user ) );

    }
}

Я тоже попробовал hwioauthbundle, но не смог найти его для меня.

У меня 2 проблемы: Первая: Мне нужно всплывающее окно для входа в систему.во-вторых: когда я нажимаю кнопку «мышка», я перехожу на URL-адрес проверки подлинности, чтобы войти в мою учетную запись, и перенаправляет меня на URL-адрес, указанный в приложении для работы с мышью, а также в моем коде со строкой запроса code и state, нокогда я обновляю страницу идет до 500 и говорит Notice: Undefined property: stdClass::$access_token.Кроме того, этот URL не будет работать для конкретной ссылки на вакансию, которая будет иметь прямое выражение, например, для работы 1, работы 2 и т. д. Я пробовал много решений, но пока не добился успеха.

Моя версия Symfony - 4.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...