A TypeScript/JavaScript client for FusionAuth's OAuth2 Authorization Code Flow.
npm install @properdo/fusionauth-oauth2-clientA TypeScript/JavaScript client for FusionAuth's OAuth2 Authorization Code Flow.
``bash`
npm install @properdo/fusionauth-oauth2-client
`typescript
import { CodeFlow } from '@properdo/fusionauth-oauth2-client';
const client = new CodeFlow({
clientId: 'YOUR_CLIENT_ID',
clientSecret: 'YOUR_CLIENT_SECRET',
redirectUri: 'http://localhost:5545/oauth2callback',
oauth2Host: 'https://auth.example.com',
scope: 0, // or use bitwise OR of AddressScope, EmailScope, etc.
});
`
#### Understand setting scope of OAuth2
Scopes can be set with bitwise OR, there are 4 scopes in total: AddressScope, EmailScope, ProfileScope, PhoneScope.
`typescript
import { CodeFlow, AddressScope, EmailScope } from '@properdo/fusionauth-oauth2-client';
const client = new CodeFlow({
...
// This will call OAuth2 code flow with scope AddressScope and EmailScope, resulting the profile getting also contains the address and email of the user
scope: AddressScope | EmailScope
});
`
However, you can also not setting any scope at all by putting number 0:
`typescript`
const client = new CodeFlow({
...
scope: 0,
});
This will call OAuth2 code flow with 0 scope. With this, you also get the access_token that verifies the user is indeed logged in on FusionAuth, but calling getUserInfo(access_token) will result error as we do not have the specified scope to get user information !!!
`typescript`
const startUrl = client.start();
// Redirect the user to startUrl
`typescript
const code = 'CODE_FROM_QUERY_STRING';
const tokenResponse = await client.getAccessToken(code);
if ('access_token' in tokenResponse) {
// Success
console.log('Access Token:', tokenResponse.access_token);
} else {
// Error
console.error(tokenResponse.error_description);
}
`
`typescriptgetAccessToken
// The accessToken is taken from function ;``
// This will cost 1 additional request to the FusionAuth server
const accessToken = 'ACCESS_TOKEN';
const userInfo = await client.getUserInfo(accessToken);
console.log(userInfo);
MIT