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
import passport from 'passport';
import { Strategy as SalesforceStrategy } from 'passport-salesforce-instance';
passport.use(
new SalesforceStrategy(
{
host: (_req, options) =>
options.host ??
(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 {
let user = await User.find({
sf_id: profile.user_id,
sf_org_id: profile.organization_id,
});
if (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 {
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);
}
},
),
);
export const withSfAuth = async (request, response, next) => {
const host = await someWayToLookupSfInstanceHost(request);
const state = {
some: 'foo',
};
return passport.authenticate('salesforce', {
host,
session: false,
state: JSON.stringify(state),
})(request, response, next);
};
import { withSfAuth } from './auth.ts';
app.get('/users/join/sf', withSfAuth, (req, res, next) => {
res.send(req.user.name);
});
Strategy params
Name | Required | Default | Description |
---|
host | true | undefined | String of Function typed as (req: Express.Reqest, options: AuthorizeOptions) => string , which contains host of Salesforce instance |
clientID | true | undefined | String with clientID of Salesforce app |
clientSecret | true | undefined | String with clientSecret of Salesforce app |
callbackURL | true | undefined | String with callback url of your app to handle Salesforce response. For usage example it will be <app host>/users/join/sf |
authorizationURL | false | ${host}/services/oauth2/authorize | Url of Salesforce OAuth2 authorize page |
tokenURL | false | ${host}/services/oauth2/token | Url of Salesforce OAuth2 token api endpoint |
isForceLogin | false | false | View login form into authorize action. It will prevent automatic authorize of logged in users |
Development
npm run format
npm run lint
npm run build
npm run test
Active maintenance with care and ❤️.
Feel free to send a PR.