ng-google-one-tap
TypeScript icon, indicating that this package has built-in type declarations

2.1.10 • Public • Published

GoogleOneTap

Google one tap for Angular application.

Getting started

Install via npm

npm i ng-google-one-tap

Version compatibility

Supported from Angular 11+

Import the module

In your AppModule, import the NgGoogleOneTapModule

import { NgGoogleOneTapModule } from 'ng-google-one-tap';

@NgModule({
declarations: [
...
],
imports: [
...
/** Please refer to the options table for explanation **/
NgGoogleOneTapModule.config(
    {  
        client_id: 'App_client_id',
        cancel_on_tap_outside: false,
        authvalidate_by_googleapis: false,
        auto_select: false,
        disable_exponential_cooldowntime: false,
        context: 'signup',
    })
],
providers: [],
bootstrap: [...]
})
export class AppModule { }

NgOneTap service

import { NgOneTapService } from 'ng-google-one-tap';

@Component({
  selector: 'app-demo',
  templateUrl: './demo.component.html',
  styleUrls: ['./demo.component.css']
})
export class DemoComponent implements OnInit {

  userDetails;
  constructor(private oneTap: NgOneTapService) { }

   ngOnInit() {
        /** Initialize OneTap, While initialing you can pass config  like this.oneTap.tapInitialize(config) here config is optional. **/
        this.oneTap.tapInitialize();

        /** Subscribe the Tap Moment. following response options all have self explanatory.
         *  If you want more info please refer at bottom of the document attached link. **/
        this.oneTap.promtMoment.subscribe(res => { 
           res.getDismissedReason(); 
           res.getMomentType();
           res.getNotDisplayedReason();
           res.getSkippedReason();
           res.isDismissedMoment();
           res.isDisplayed();
           res.isNotDisplayed();
           res.isSkippedMoment();
        });

        /** The JWT credentials will be returned as a response after completing the one tap process.  **/
        this.oneTap.oneTapCredentialResponse.subscribe(res => {
            /**  Response
             * clientId: your client ID,
             * client_id: your client ID,
             * credential: The credential/secret key is utilized for user validation and information retrieval. Validation can be performed on the backend server/platform using the appropriate Google library. Please refer to the backend implementation details at the bottom of the document
             **/
        });

        /** Authentication validation can be performed using the Google OAuth2 APIs, eliminating the need for client_id validation on the backend and the retrieval of user details **/
        this.oneTap.authUserResponse.subscribe(res => { 
            this.userDetails = res;
        });

   }

    tapCancel() {
        this.oneTap.cancelTheTap();
    }

}

Options

Name Type Required Description
client_id String true Your application's client ID
disable_exponential_cooldowntime Boolean false When you close the one tap prompt by clicking the X icon, it may take some time for it to reset or reappear. This is known as an exponential cool down. You can disable this using the specified option.
authvalidate_by_googleapis Boolean false Validate the user without backend-server validation by using google provide APIs. Please review the document before using it.
auto_select Boolean false Enables automatic selection.
cancel_on_tap_outside Boolean false Cancels the prompt if the user clicks outside the prompt.
context String false The title and words in the One Tap prompt

Resource

  1. Exponential cooldown
  2. Google One Tap Implementation doc by google
  3. Google library and API

Server

Using one of the Google API Client Libraries (e.g. Java, Node.js, PHP, Python) is the recommended way to validate Google ID tokens in a production environment.

npm install google-auth-library --save

Node.js

const { OAuth2Client } = require('google-auth-library');
const client = new OAuth2Client(CLIENT_ID);
async function verify() {
	const ticket = await client.verifyIdToken({
		idToken: token,
		audience: CLIENT_ID, // Specify the CLIENT_ID of the app that accesses the backend
		// Or, if multiple clients access the backend:
		//[CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3]
	});
	const payload = ticket.getPayload();
	const userid = payload['sub'];
	// If request specified a G Suite domain:
	// const domain = payload['hd'];
}
verify().catch(console.error);

More Reference - https://developers.google.com/identity/sign-in/web/backend-auth#using-a-google-api-client-library

Package Sidebar

Install

npm i ng-google-one-tap

Weekly Downloads

84

Version

2.1.10

License

MIT

Unpacked Size

61.6 kB

Total Files

23

Last publish

Collaborators

  • jayasurya-k