Skip to content

A simple Passport strategy for LinkedIn OAuth2 API Version 2.

License

Notifications You must be signed in to change notification settings

tzwickl/passport-linkedin-api-v2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A simple Passport strategy for LinkedIn OAuth2 API Version 2.

Install

npm install passport-linkedin-api-v2

Usage

  1. Register the strategy with passport.use
  2. Call /auth/linkedin which calls the function authenticateUser
  3. Enter credentials for LinkedIn in browser
  4. Lite Profile is returned from LinkedIn
import { LinkedinAuth } from 'passport-linkedin-api-v2';

class LinkedInAuthController {
    public constructor() {
      passport.use('linkedin', this.getStrategy());
    }
    
    // Return strategy for LinkedIn
    private getStrategy = (): Strategy => {
        const params = {
          clientID: CLIENT_ID,
          clientSecret: CLIENT_SECRET,
          callbackURL: "http://127.0.0.1:3000/auth/linkedin",
          scope: ['r_emailaddress', 'r_liteprofile'],
        };
    
        return new linkedInStrategy(params,
          (accessToken: string, refreshToken: string, profile: any, done: any) => {
            // This function is called once a user successfully authenticated
            profile.accessToken = accessToken;
            done(profile);
          });
    };
    
    // Authenticate with LinkedIn and handle callback
    private authenticate = (strategy: string, state: string, callback: any) => passport.authenticate(
        strategy,
        {
          state,
          session: false,
          failWithError: true,
          passReqToCallback: true,
        },
        callback);
    
    // Route /auth/linkedin
    public authenticateUser = (req, res) => {
      this.authenticate('linkedin', 'custom_state', async (profile: any) => {
        // This function is called once a user successfully authenticated
        if (!profile || profile.id == null || profile.accessToken == null) {
          throw 'Authentication failed';
        }
        const user = await this.getUser(profile.accessToken);
      })(req, res);
    };
    
    // Return LiteProfile of user
    private getUser = (accessToken: string): Promise<IUser> => {
      return new Promise<IUser>((resolve, reject) => {
        LinkedinAuth.getLiteProfile(accessToken, (err, profile) => {
          if (err) {
            return reject(err);
          }
          resolve(profile);
        });
      });
    }
}

See this for details on LinkedIn API v2.

Issue Reporting

If you have found a bug or if you have a feature request, please report them at this repository issues section.

Author

Thomas Zwickl

License

This project is licensed under the MIT license. See the LICENSE file for more info.

About

A simple Passport strategy for LinkedIn OAuth2 API Version 2.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published