@properdo/fusionauth-oauth2-client
v1.0.2
Published
A TypeScript/JavaScript client for FusionAuth's OAuth2 Authorization Code Flow.
Readme
FusionAuth OAuth2 Client
A TypeScript/JavaScript client for FusionAuth's OAuth2 Authorization Code Flow.
Features
- Start the OAuth2 Authorization Code Flow
- Exchange authorization code for access token
- Fetch user info
- Type-safe configuration and responses
Installation
npm install @properdo/fusionauth-oauth2-clientUsage
1. Import and configure the client
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.
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:
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 !!!
2. Get the authorization URL
const startUrl = client.start();
// Redirect the user to startUrl3. Exchange code for access token
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);
}4. Fetch user info
// The accessToken is taken from function `getAccessToken`;
// This will cost 1 additional request to the FusionAuth server
const accessToken = 'ACCESS_TOKEN';
const userInfo = await client.getUserInfo(accessToken);
console.log(userInfo);License
MIT
