Socket
Socket
Sign inDemoInstall

passport-salesforce-instance

Package Overview
Dependencies
5
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    passport-salesforce-instance

Salesforce instance authentication strategy for Passport with passing req and variable host.


Version published
Maintainers
1
Created

Readme

Source

Ci Status Npm version

passport-salesforce-instance

Salesforce instance authentication strategy for Passport with passing req and variable host. Main goal of this package is login to concrete salesforce instance. It could be sandbox, dev org, custom domain org, etc.

Package includes its TypeScript Definitions

Install

npm install passport-salesforce-instance

Usage

// auth.ts
import passport from 'passport';
import { Strategy as SalesforceStrategy } from 'passport-salesforce-instance';

// Add Strategy
passport.use(
  new SalesforceStrategy(
    {
      host: (_req, options) =>
        options.host ??
        // fallback in case no instance founded
        (isSandbox ? 'https://test.salesforce.com' : 'https://login.salesforce.com'),
      clientID: 'your-sf-clientId',
      clientSecret: 'your-sf-clientSecret',
      callbackURL: 'your-cbUrl',
    },
    async (accessToken, refreshToken, profile, cb) => {
      try {
        // Find user
        let user = await User.find({
          sf_id: profile.user_id,
          sf_org_id: profile.organization_id,
        });

        if (user) {
          // Update user
          user.sf_token_access_token = accessToken;
          user.sf_token_refresh_token = refreshToken;
          user.name = profile.name;
          user.email = profile.email;
          user.nickname = profile.nickname;
        } else {
          // Create user
          user = new User({
            sf_token_access_token: accessToken,
            sf_token_refresh_token: refreshToken,
            name: profile.name,
            email: profile.email,
            sf_id: profile.user_id,
            sf_org_id: profile.organization_id,
          });
        }

        await user.save();

        return cb(null, user);
      } catch (e) {
        return cb(e, null);
      }
    },
  ),
);

// Way to look up host before request auth
export const withSfAuth = async (request, response, next) => {
  // Find salesforce instance host before auth
  const host = await someWayToLookupSfInstanceHost(request);

  // Create state of request passed in auth endpoint
  const state = {
    some: 'foo',
  };

  return passport.authenticate('salesforce', {
    host,
    session: false,
    state: JSON.stringify(state),
  })(request, response, next);
};
// app.ts
import { withSfAuth } from './auth.ts';

app.get('/users/join/sf', withSfAuth, (req, res, next) => {
  res.send(req.user.name);
});

Strategy params

NameRequiredDefaultDescription
hosttrueundefinedString of Function typed as (req: Express.Reqest, options: AuthorizeOptions) => string, which contains host of Salesforce instance
clientIDtrueundefinedString with clientID of Salesforce app
clientSecrettrueundefinedString with clientSecret of Salesforce app
callbackURLtrueundefinedString with callback url of your app to handle Salesforce response. For usage example it will be <app host>/users/join/sf
authorizationURLfalse${host}/services/oauth2/authorizeUrl of Salesforce OAuth2 authorize page
tokenURLfalse${host}/services/oauth2/tokenUrl of Salesforce OAuth2 token api endpoint
isForceLoginfalsefalseView login form into authorize action. It will prevent automatic authorize of logged in users

Development

npm run format # code fomatting
npm run lint # linting
npm run build # build
npm run test # testing

Active maintenance with care and ❤️.

Feel free to send a PR.

Keywords

FAQs

Last updated on 27 May 2022

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc