Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Symfony2 HwioAuth - getting full profildetail from linkedin

Tags:

i already opened yesterday a topic for my questions about hwioauthbundle in symfony2. Symfony2 HWIOauthBundle error with response

Thanks to stloyd for his answer, this helped me to figure it out how to use the bundle for getting access to linkedin.

I am trying now to get not only the formattedname from linkedin but also other informations like educations, skill s.o.

I am not sure if this is generally possible with HwioAuth? That is my config.yml

hwi_oauth:
firewall_name: main
resource_owners:
    linkedin:
        type: linkedin
        client_id: %linkedin_client_id%
        client_secret: %linkedin_client_secret%
        scope: r_fullprofile
        infos_url: 'https://api.linkedin.com/v1/people/~:(id,educations,languages,skills)?format=json'
        scope:     'r_fullprofile'
        paths:
            educations: educations
            languages: languages
            skills: skills

That is my security.yml:

    providers:
     ....
     my_custom_hwi_provider:
        id: linkedin.oauth_user_provider

firewalls:
    main:
       ...
        oauth:
            resource_owners:
                linkedin: "/login/check-linkedin"
            login_path: /login
            failure_path: /login
            oauth_user_provider:
                service: linkedin.oauth_user_provider

This is my service class Provider:

    <?php

namespace XXXX\UtilBundle\Util\OAuthProvider;

use HWI\Bundle\OAuthBundle\Security\Core\User\OAuthUserProvider;
use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;

class Provider
{
   protected $session, $doctrine;
   public function __construct($session, $doctrine) {
       $this->session = $session;
       $this->doctrine = $doctrine;

   }



   public function loadUserByOAuthUserResponse(UserResponseInterface $response)
   {
      //data from LINKEDIN response
      var_dump($response);
      exit;
   }
 }

As you see i give_out the json what i get from linkedin. Hier is probally the response and the fields for educations, skills are empty!

    class HWI\Bundle\OAuthBundle\OAuth\Response\PathUserResponse#694 (4) {
 protected $paths =>
 array(8) {
'identifier' =>
string(2) "id"
'nickname' =>
string(13) "formattedName"
'realname' =>
string(13) "formattedName"
'email' =>
string(12) "emailAddress"
'profilepicture' =>
string(10) "pictureUrl"
'educations' =>
string(10) "educations"
'languages' =>
string(9) "languages"
'skills' =>
string(6) "skills"
}
protected $response =>
 array(1) {
 'id' =>
 string(10) "XYXYXYXYXYXYXY"
}
protected $resourceOwner =>
class HWI\Bundle\OAuthBundle\OAuth\ResourceOwner\LinkedinResourceOwner#699 (8) {
  protected $options =>
    array(8) {
    'authorization_url' =>
    string(49) "https://www.linkedin.com/uas/oauth2/authorization"
    'access_token_url' =>
    string(47) "https://www.linkedin.com/uas/oauth2/accessToken"
    'infos_url' =>
    string(81) "https://api.linkedin.com/v1/people/~:(id,educations,languages,skills)?format=json"
    'csrf' =>
    bool(true)
    'client_id' =>
    string(12) "XYXYXYXYXYXYXY"
    'client_secret' =>
    string(16) "XYXYXYXYXYXYXY"
    'scope' =>
    string(29) "r_fullprofile"
    'options' =>
    array(0) {
    ...
   }
  }
  protected $paths =>
   array(8) {
    'identifier' =>
      string(2) "id"
     'nickname' =>
       string(13) "formattedName"
     'realname' =>
       string(13) "formattedName"
     'email' =>
       string(12) "emailAddress"
     'profilepicture' =>
       string(10) "pictureUrl"
     'educations' =>
       string(10) "educations"
     'languages' =>
       string(9) "languages"
     'skills' =>
       string(6) "skills"
    }
    protected $defaultOptions =>
     array(6) {
      'client_id' =>
        NULL
      'client_secret' =>
        NULL
      'infos_url' =>
        NULL
      'user_response_class' =>
        string(54) "HWI\Bundle\OAuthBundle\OAuth\Response\PathUserResponse"
      'scope' =>
        NULL
      'csrf' =>
        bool(false)
     }
   protected $httpClient =>
   class Buzz\Client\Curl#700 (7) {
      private $lastCurl =>
      resource(286) of type (curl)
      protected $options =>
       array(2) {
       ...
    }
   protected $ignoreErrors =>
    bool(true)
   protected $maxRedirects =>
    int(5)
   protected $timeout =>
    int(5)
   protected $verifyPeer =>
    bool(true)
   protected $proxy =>
    NULL
  }
   protected $name =>
    string(8) "linkedin"
    protected $state =>
    NULL
    protected $storage =>
  class HWI\Bundle\OAuthBundle\OAuth\RequestDataStorage\SessionStorage#701 (1) {
    private $session =>
      class Symfony\Component\HttpFoundation\Session\Session#220 (3) {
      ...
   }
  }
    public $httpUtils =>
    class Symfony\Component\Security\Http\HttpUtils#230 (2) {
    private $urlGenerator =>
    class Symfony\Bundle\FrameworkBundle\Routing\Router#233 (9) {
     ...
    }
    private $urlMatcher =>
    class Symfony\Bundle\FrameworkBundle\Routing\Router#233 (9) {
     ...
   }
  }
}
 protected $oAuthToken =>
 class HWI\Bundle\OAuthBundle\Security\Core\Authentication\Token\OAuthToken#696 (11) {
  private $accessToken =>
   string(179) "XYXYXYXYXYXYXY"
   private $rawToken =>
    array(2) {
     'expires_in' =>
     int(5183807)
     'access_token' =>
      string(179) "XYXYXYXYXYXYXYXY"
   }
   private $refreshToken =>
  NULL
   private $expiresIn =>
   int(5183807)
   private $createdAt =>
   int(1378302276)
   private $tokenSecret =>
   NULL
   private $resourceOwnerName =>
   NULL
   private $user =>
   NULL
   private $roles =>
    array(0) {
   }
   private $authenticated =>
    bool(false)
    private $attributes =>
    array(0) {
    }
 }

}

In protected $oAuthToken => is the value private $authenticated => bool(false)

Am i authenticated? And how can i access other fields with r_fullprofile as scope from Linkedin?

regards

like image 804
user2742271 Avatar asked Sep 04 '13 14:09

user2742271


1 Answers

Look at this LinkedIn API client and its first example. You fetch stuff by

$linkedIn->api('v1/people/~:(firstName,lastName)');

Also, have a look at the API documentation. It states clearly what fields you can fetch and how.

like image 112
Tobias Nyholm Avatar answered Sep 30 '22 18:09

Tobias Nyholm