# LinkedIn

LinkedIn supports OAuth1 and OAuth2. Migration between each type is fair simple since the same Key / Secret pair is used for both authentication types.

LinkedIn OAuth setup is similar to any other OAuth service. The auth flow is explained on LinkedIn Developers docs. First you will need to register an app att LinkedIn Developer Network.

## OAuth1

- Fill the application key and secret in your settings:

      SOCIAL_AUTH_LINKEDIN_KEY = ''
      SOCIAL_AUTH_LINKEDIN_SECRET = ''

- Application scopes can be specified by:

      SOCIAL_AUTH_LINKEDIN_SCOPE = [...]

  Check the available options at LinkedIn Scopes. If you want to request a user’s email address, you’ll need specify that your application needs access to the email address use the `r_emailaddress` scope.

- To request extra fields using LinkedIn fields selectors just define this setting:

      SOCIAL_AUTH_LINKEDIN_FIELD_SELECTORS = [...]

  with the needed fields selectors, also define `SOCIAL_AUTH_LINKEDIN_EXTRA_DATA` properly as described in OAuth, that way the values will be stored in `UserSocialAuth.extra_data` field. By default `id`, `first-name` and `last-name` are requested and stored.

For example, to request a user’s email, headline, and industry from the Linkedin API and store the information in `UserSocialAuth.extra_data`, you would add these settings:

    # Add email to requested authorizations.
    SOCIAL_AUTH_LINKEDIN_SCOPE = ['r_basicprofile', 'r_emailaddress', ...]
    # Add the fields so they will be requested from linkedin.
    SOCIAL_AUTH_LINKEDIN_FIELD_SELECTORS = ['email-address', 'headline', 'industry']
    # Arrange to add the fields to UserSocialAuth.extra_data
    SOCIAL_AUTH_LINKEDIN_EXTRA_DATA = [('id', 'id'),
                                       ('firstName', 'first_name'),
                                       ('lastName', 'last_name'),
                                       ('emailAddress', 'email_address'),
                                       ('headline', 'headline'),
                                       ('industry', 'industry')]

## OAuth2

OAuth2 works exacly the same than OAuth1, but the settings must be named as:

    SOCIAL_AUTH_LINKEDIN_OAUTH2_*

Looks like LinkedIn is forcing the definition of the callback URL in the application when OAuth2 is used. Be sure to set the proper values, otherwise a `(400) Client Error: Bad Request` might be returned by their service.