@reflaunt/auth-client-sdk

Reflaunt angular client sdk that is used to perform authentication to reflaunt via cognito with a fallback to legacy token management

Usage no npm install needed!

<script type="module">
  import reflauntAuthClientSdk from 'https://cdn.skypack.dev/@reflaunt/auth-client-sdk';
</script>

README

Auth Client Sdk

Reflaunt angular client sdk that is used to perform authentication to reflaunt via cognito with a fallback to legacy token management

Publishing

After your library is build, go to the dist folder cd ../../dist/auth-client-sdk and run npm publish.

Publish locally

  • After your library is build, go to the dist folder cd ../../dist/auth-client-sdk and run npm link.
  • In your application project, run npm @reflaunt/link auth-client-sdk

Running unit tests

Run ng test auth-client-sdk to execute the unit tests via Karma.

Usage

  • Imports the ReflauntAuthModule in your AppModule
  • Provide configurations of COGNITO_CONFIGURATION, AUTH_API_CONFIGURATION, LEGACY_CONFIGURATION
@NgModule({
   imports: [
     ...
     ReflauntAuthModule
   ],
   declarations: [...],
   providers: [
    {
      provide: COGNITO_CONFIGURATION,
      useValue: {
         userPoolId: 'ap-southeast-1_pool id',
         userPoolWebClientId: 'pool web client id',
         domainPrefix: 'pool domain prefix',
         region: 'ap-southeast-1',
         loginRedirect: 'https://client-local.reflaunt.com/login',
         logoutRedirect: 'https://client-local.reflaunt.com',
         resetPasswordRedirect: 'https://client-local.reflaunt.com/reset-password'
      }
    },
    {
      provide: AUTH_API_CONFIGURATION,
      useValue: {
        apiUrl: 'https://api-local.reflaunt.com'
      }
    },
    {
      provide: LEGACY_CONFIGURATION,
      useValue: {
        tokenKeyName: 'token key'
      }
    }    
   ],
   bootstrap: [AppComponent]
})
export class AppModule {}
  • ideally in the component we can just import the public reflauntAuthService: ReflauntAuthService

Configuration

COGNITO_CONFIGURATION

Key Description
userPoolId cognito user pool id
userPoolWebClientId cognito web client id
domainPrefix cognito auth API domain prefix
region cognito region
loginRedirect where to redirect the page after login by identity provider
logoutRedirect where to redirect the page after logout
resetPasswordRedirect where to redirect the page reset password

AUTH_API_CONFIGURATION

Key Description
apiUrl url of the Reflaunt API

LEGACY_CONFIGURATION

Key Description
tokenKeyName Cookies name where token is going to be stored

Common practices

listening for authentication state changes

  constructor(
    private reflauntAuthService: ReflauntAuthService
  ) {
    reflauntAuthService.listenToStateChanges().subscribe((authState: AuthState) => {
      if (authState.shouldLogout) {
        return reflauntAuthService.logout();
      }
      if (authState.isAuthenticated) {
        // fetch login details
      } else {
        if (authState.shouldRedirectToConfirmSignUp && authState.confirmSignUpParams) {
          // redirect to confirm sign up page
        }
      }
    });
  }

Getting authentication state as observable

  constructor(
    private reflauntAuthService: ReflauntAuthService
  ) {
    reflauntAuthService.isAuthenticated()
      .subscribe((authState: AuthState) => {
        // do somehting with authentication state
      }));
  }

Getting current access token as observable

  constructor(
    private reflauntAuthService: ReflauntAuthService
  ) {
    reflauntAuthService.getAccessToken()
      .subscribe((token: string) => {
            // do somehting with access token
      }));
  }

Current state

Current state can also be get real-timely by using

  constructor(
    private reflauntAuthService: ReflauntAuthService
  ) {
    console.log(reflauntAuthService.authState);
  }

Get current profile

  constructor(
    private reflauntAuthService: ReflauntAuthService
  ) {
    reflauntAuthService.getUserProfile().then(res => {
        console.log(res.data);
        // res will be the raw data from get user profile API of Reflaunt
    });
  }