@phemium-costaisa/fingerprint-auth
Version:
Automatic plugin to work with FaceID and TouchID authentication
125 lines (95 loc) • 3.45 kB
Markdown
# Phemium Fingerprint Auth
## Description
Package of component, pipe and service to handle Fingerprint authentication on Angular apps.
## Installation
Run `npm i -S @phemium-costaisa/fingerprint-auth`
## Configuration
1. Add the `FingerprintAuthModule.forRoot()` to app.module.ts:
```typescript
import { FingerprintAuthModule } from 'fingerprint-auth';
@NgModule({
imports: [
FingerprintAuthModule.forRoot({
mobile: environment.platform === 'mobile'
})
]
})
export class AppModule {}
```
2. Add `FingerprintAuthModule.forChild()` where the `biometricLoginActive` needs to be used:
```typescript
import { FingerprintAuthModule } from 'fingerprint-auth';
@NgModule({
imports: [
FingerprintAuthModule.forChild()
]
})
export class LoginMobilePageModule {}
```
### Biometric Activator component usage
To use the `<app-biometric-activador>` just import the `BiometricActivator` component in the module you need it.
But, if you need to make it as routing page, you must create a Wrapper module for it, like this:
```typescript
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { BiometricActivator } from 'fingerprint-auth';
const routes: Routes = [
{
path: '',
component: BiometricActivator
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class BiometricActivatorPageRoutingModule {}
```
### FingerprintService usage
Just import the `FingerprintService` wherever you need it:
```typescript
import { FingerprintService } from 'fingerprint-auth';
@Component()
export class MyComponent {
constructor(
private fingerprintService: FingerprintService
) { }
}
```
The FingerprintService is well documented in-code, but I'll give a few examples:
1. To login
```typescript
if (await this.fingerprintService.checkIfNeedsBiometric(email)) {
this.fingerprintService.showBiometricActivator(email, password, 'dashboard');
}
```
2. To configure Biometric:
```typescript
this.fingerprintService.showBiometricPrompt(user).then(result => {
this.login(result.user, result.password, true);
});
```
3. Profile page switches:
```typescript
biometricFace = new FormControl(false);
biometricTouch = new FormControl(false);
ngOnInit() {
this.fingerprintService.isBiometricActive(this.userService.user.email, 'face').then(active => this.biometricFace.setValue(active, { emitEvent: false }));
this.fingerprintService.isBiometricActive(this.userService.user.email, 'touch').then(active => this.biometricTouch.setValue(active, { emitEvent: false }));
this.fingerprintService.retrieveDeviceBiometrics().then(biometrics => {
if (biometrics.face || biometrics.touch) {
this.showBiometric = true;
}
})
}
this.biometricFace.valueChanges.subscribe(enable => this.biometricChange('face', enable));
this.biometricTouch.valueChanges.subscribe(enable => this.biometricChange('touch', enable));
}
async biometricChange(biometricType: keyof BiometricsAvailable, enabled: boolean) {
if (enabled) {
await this.fingerprintService.clearBiometricData(this.userService.user.email, biometricType);
} else {
await this.fingerprintService.disableBiometricData(this.userService.user.email, biometricType);
}
}
```