3.3.3 • Published 5 years ago

ngx-auth-firebaseui-folio v3.3.3

Weekly downloads
1
License
MIT
Repository
-
Last release
5 years ago

ngx-auth-firebaseui - Open Source Library for Angular Web Apps to integrate a material user interface for firebase authentication.

npm version demo docs: typedoc codecov CircleCI branch Build Status Join the chat at https://gitter.im/ngx-auth-firebaseui/Lobby dependency Status devDependency Status npm Greenkeeper badge license GitHub forks GitHub stars GitHub followers Twitter URL Twitter Follow Awesome

Angular UI component for firebase authentication. This library is an angular module (including angular components and services) that allows to authenticate your users with your firebase project. NgxAuthFirebseUI is compatible with angular material and angular flexLayout.

If you prefer to develop with bootstrap rather than with material design, please check this project @firebaseui/ng-bootstrap

Built by and for developers :heart:

Do you have any question or suggestion ? Please do not hesitate to contact us! Alternatively, provide a PR | open an appropriate issue here

If you like this project, support ngx-auth-firebaseui by starring :star: and sharing it :loudspeaker:

Table of Contents

ngx-auth-firebaseui vs firebaseui-web

Featuresngx-auth-firebaseuifirebaseui
Sign Up:heavy_check_mark::heavy_check_mark:
Sign In:heavy_check_mark::heavy_check_mark:
Sign In Anonymously:heavy_check_mark::heavy_check_mark:
Sign In with Google:heavy_check_mark::heavy_check_mark:
Sign In with Facebook:heavy_check_mark::heavy_check_mark:
Sign In with Twitter:heavy_check_mark::heavy_check_mark:
Sign In with Github:heavy_check_mark::heavy_check_mark:
Sign In with Microsoft:heavy_check_mark::heavy_check_mark:
Sign In with Yahoo:heavy_check_mark::heavy_check_mark:
Sign In with Phonenumber:x::heavy_check_mark:
Sign out:heavy_check_mark::x:
Sign in/up progress indicator:heavy_check_mark::x:
Password Strength indicator:heavy_check_mark::x:
Forgot/Reset Password:heavy_check_mark::x:
Password Strength Meter :heavy_check_mark::x:
Delete account:heavy_check_mark::x:
Login Authentication Guard:heavy_check_mark::x:
User Profile:heavy_check_mark::x:
Check whether user's email is verified:heavy_check_mark::x:
Edit user's display name (incl. validation):heavy_check_mark::x:
Edit user's email (incl. validation):heavy_check_mark::x:
Edit user's phone number (incl. validation):heavy_check_mark::x:
Configure your favorite auth provider in runtime:heavy_check_mark::x:
Sync user'auth with Firestore read more:heavy_check_mark::x:
Angular v2-8 friendly:heavy_check_mark::x:
Internationalization (i18n):heavy_check_mark::heavy_check_mark:
Ionic/cordova support:soon: @firebaseui/ionic-auth:x:
Real time form validation:heavy_check_mark::x:
Easy to integrate:heavy_check_mark::x:
Support Server Side Rendering:heavy_check_mark::x:
Support SPA without further config:heavy_check_mark::x:
Support Safari private browsing:heavy_check_mark::interrobang:
AWESOME:heavy_check_mark::interrobang:

Why to use ngx-auth-firebaseui ?

  • :gift_heart: it uses a responsive and accessible web design UX/UI from google material concepts and components (supporting desktop and mobile view).
  • :lipstick: pick up your own theme! change the primary, accent and warn colors whenever you need (e.g to support light and dark themes)
  • :ship: super easy to use with an angular based project (project that is created with the angular-cli)
  • :soon: optional configuration
  • :recycle: configure your authentication providers in runtime
  • :recycle: reusable components for every project that needs an authentication with a firebase project/app.
  • :customs: built in feedback mechanism in form of a snackbar when an error or any important event occurred.
  • :sos: ability to sign out or even to delete totally the account
  • :ghost: your client does not want to create an account in your project? Let him to sign in anonymously!
  • :busts_in_silhouette: user profile component to display user's data using via ngx-auth-firebaseui-user
  • :zap: update user profile as feature
  • :fire: Sync user's authentication with FIRESTORE AUTOMATICALLY
  • :muscle: Forgot Password feature! Go and let your users to recover their passwords easily
  • :tada: Supports SSR - Server Side Rendering

Library's components

  • <ngx-auth-firebaseui> used for the authentication process
  • <ngx-auth-firebaseui-providers> used to display only buttons for providers like google, facebook, twitter, github, microsoft and yahoo
  • <ngx-auth-firebaseui-user> used to display/edit the data of the current authenticated user in form of a material card
  • <ngx-auth-firebaseui-avatar> used to display/edit the data of the current authenticated user in the toolbar

Supported Providers:

  • anonymously
  • email and password (traditional)
  • google
  • facebook
  • twitter
  • github
  • Microsoft
  • Yahoo
  • phone number :soon:

Supported Processes and Actions:

  • sign up
  • sign in
  • sign in Anonymously | with google, facebook, twitter, github, microsoft, yahoo
  • sign out
  • validation of password's strength while creating a new account using @angular-material-extensions/password-strength
  • forgot/reset password
  • sending email verifications
  • delete user's account
  • edit user's profile like email, name, (profile picture :soon:) and phone number
  • firestore auto sync :fire:
  • do not allow users to create new accounts before checking the terms of services and private policy - for mor info check this here

the full tutorial guide can be found here

Demo | Features | Examples

take a look at live example with firestore's synchronization here


Screenshots - Browser

  • sign in

v8

in combination with ngx-auth-firebaseui-user

v7

  • Sign up - registration

before

after

demo outlook

Screenshots - Client Side Validation

Screenshots

row layout

Please note: when the view port is getting too small, the layout will be automatically change to column

column layout

Screenshots

  • user profile

when logged out

when logged in

in edit mode

Screenshot - Mobile Browser

  • Sign in - mobile

Screenshots - Reset Password

  • Before
  • After

Screenshot - i18n - multiple languages


Peer Dependencies - please make sure that peerDependencies are installed if you are not using the schematics

"peerDependencies": {
    "@angular/core": "^8.x",
    "@angular/animations": "^8.x",
    "@angular/cdk": "^8.x",
    "@angular/flex-layout": "^8.0.0-beta.26",
    "@angular/forms": "^8.x",
    "@angular/material": "^8.x",
    "@angular/fire": "5.2.x",
    "firebase": "6.x",
  }

NOTE:

If you are still running angular v5, please consider to user ngx-auth-firebaseui v0.x

v1.x should be used with angular v7 projects v3.x should be used with angular v8 projects

help!


Dependencies

the @angular-material-extensions/password-strength is used to indicate how secure is the provided password when registering a new firebase user e.g:

(1) Installation

1. Install via ng add. (Recommended)

If Angular Material Design is not setup, just run ng add @angular/material learn more

Now add the library via the angular schematics

ng add ngx-auth-firebaseui
  • :heavy_check_mark: peer dependencies will be automatically added the package.json and installed
  • :heavy_check_mark: ngx-auth-firebaseui 's module will be automatically imported to the root module (just replace PUT_YOUR_FIREBASE_API_KEY_HERE with your firebase api key)
  • :heavy_check_mark: ngx-auth-firebaseui 's assets will be automatically added the angular.json file

2. Install via npm. (Alternative)

Install above dependencies via npm.

Now install ngx-auth-firebaseui via:

npm install --save ngx-auth-firebaseui
npm i -s @angular/material @angular/cdk @angular/flex-layout @angular/forms @angular/animations

Firebase deps

npm i -s firebase @angular/fire

-> continue by following the instructions here

Once installed you need to import the main module:

import { NgxAuthFirebaseUIModule } from 'ngx-auth-firebaseui-folio';

The only remaining part is to list the imported module in your application module. The exact method will be slightly different for the root (top-level) module for which you should end up with the code similar to (notice NgxAuthFirebaseUIModule .forRoot()):

and then from your Angular AppModule:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';

// Import your library
import { NgxAuthFirebaseUIModule } from 'ngx-auth-firebaseui-folio';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,

    // Specify the ngx-auth-firebaseui library as an import
    NgxAuthFirebaseUIModule.forRoot({
                    apiKey: 'your-firebase-apiKey',
                    authDomain: 'your-firebase-authDomain',
                    databaseURL: 'your-firebase-databaseURL',
                    projectId: 'your-firebase-projectId',
                    storageBucket: 'your-firebase-storageBucket',
                    messagingSenderId: 'your-firebase-messagingSenderId'
                }),
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Other modules in your application can simply import NgxAuthFirebaseUIModule:

import { NgxAuthFirebaseUIModule } from 'ngx-auth-firebaseui-folio';

@NgModule({
  declarations: [OtherComponent, ...],
  imports: [NgxAuthFirebaseUIModule, ...],
})
export class OtherModule {
}

SystemJS

Note:If you are using SystemJS, you should adjust your configuration to point to the UMD bundle. In your systemjs config file, map needs to tell the System loader where to look for ngx-auth-firebaseui:

map: {
  'ngx-auth-firebaseui': 'node_modules/ngx-auth-firebaseui/bundles/ngx-auth-firebaseui.umd.js',
}

(2) Configuration

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';

// Import your library
import { NgxAuthFirebaseUIModule } from 'ngx-auth-firebaseui-folio';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,

    // Specify the ngx-auth-firebaseui library as an import
    NgxAuthFirebaseUIModule.forRoot(
                {
                  apiKey: 'your-firebase-apiKey',
                  authDomain: 'your-firebase-authDomain',
                  databaseURL: 'your-firebase-databaseURL',
                  projectId: 'your-firebase-projectId',
                  storageBucket: 'your-firebase-storageBucket',
                  messagingSenderId: 'your-firebase-messagingSenderId'
                },
                 () => 'your_app_name_factory',
                {
                  enableFirestoreSync: true, // enable/disable autosync users with firestore
                  toastMessageOnAuthSuccess: false, // whether to open/show a snackbar message on auth success - default : true
                  toastMessageOnAuthError: false, // whether to open/show a snackbar message on auth error - default : true
                  authGuardFallbackURL: '/loggedout', // url for unauthenticated users - to use in combination with canActivate feature on a route
                  authGuardLoggedInURL: '/loggedin', // url for authenticated users - to use in combination with canActivate feature on a route
                }),
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }


(3) Usage

Once the library is imported, you can use its components, directives and pipes in your Angular application:

<ngx-auth-firebaseui></ngx-auth-firebaseui>

<!-- You can now use the library component in app.component.html  -->

<ngx-auth-firebaseui (onSuccess)="printUser($event)"
                     (onError)="printError()">
</ngx-auth-firebaseui>

or

<!-- or simply in the app.component.ts -->
@Component({
    selector: 'app',
    template: `
        <ngx-auth-firebaseui (onSuccess)="printUser($event)" (onError)="printError()"></ngx-auth-firebaseui>`
})
class AppComponent {

    printUser(event) {
        console.log(event);
    }

    printError(event) {
        console.error(event);
    }
}

Result:

<ngx-auth-firebaseui-providers></ngx-auth-firebaseui-providers>

<!-- You can now use the library component in app.component.html  -->
<ngx-auth-firebaseui-providers layout="column"></ngx-auth-firebaseui-providers>

<ngx-auth-firebaseui-user></ngx-auth-firebaseui-user>

<ngx-auth-firebaseui-user></ngx-auth-firebaseui-user>

Result:

<ngx-auth-firebaseui-avatar></ngx-auth-firebaseui-avatar>

<ngx-auth-firebaseui-avatar></ngx-auth-firebaseui-avatar>

API

<ngx-auth-firebaseui></ngx-auth-firebaseui>

optionbindtypedefaultdescription
providersInput()string[] | 'all' or AuthProvider.All | choose your favorite authentication provider: google | facebook | twitter | github
appearanceInput()MatFormFieldAppearancestandardthe appearance of the mat-form-field #'legacy''standard''fill''outline'
tabIndexInput()numbernull;0the selected tab - either sign in or register
registrationEnabledInput()booleantruewhether the user is able to register a new account
resetPasswordEnabledInput()booleantruewhether the user is able to reset his account password
guestEnabledInput()booleantruewhether the user can sign in and continue as guest
tosUrlInput()string-the url of term of services
privacyPolicyUrlInput()string-the url of the private privacy
goBackURLInput()string-the url to redirect to after creating a new user and clicking the go back button - the button is only available when the input is provided
messageOnAuthSuccessInput()stringsee the code ->the message of the snackbar when the authentication process was successful
messageOnAuthErrorInput()stringsee the code ->the message of the snackbar when the authentication process has failed
onSuccessOutput()any-this will be fired when an authentication process was success. The authenticated user is emitted!
onErrorOutput()any-this event will be fired when an error occurred during the authentication process! An error message is emitted!
selectedTabChangeOutput()MatTabChangeEvent-output event is emitted when the active tab changes (signin, register and reset password tab)
enableLengthRuleInput()booleantruewhether to validate the length of the password
enableLowerCaseLetterRuleInput()booleantruewhether a lowercase letter is optional
enableUpperCaseLetterRuleInput()booleantruewhether a uppercase letter is optional
enableDigitRuleInput()booleantruewhether a digit char is optional
enableSpecialCharRuleInput()booleantruewhether a special char is optional
minInput()number8the minimum length of the password
maxInput()number30the maximum length of the password
onStrengthChangedOutput()number-emits the strength of the provided password in % e.g: 20%, 40%, 60%, 80% or 100%

if you prefer to customize the text of this component, check these inputs here that have been used for translations

PS: if either tosUrl orprivacyPolicyUrl` are provided, the user will be asked to check and accepts tos and pp before registering a new account or sign in in anonymously

How to disable users to sign in and continue as guest, use the guestEnabled input

<ngx-auth-firebaseui [guestEnabled]="false"
                     (onSuccess)="printUser($event)"
                     (onError)="printError($event)">
</ngx-auth-firebaseui>

Result:

How to configure your input providers ? see the examples

e.g: in your component, import the AuthProvider enum to pick up your favorite provider:

import {OnInit} from '@angular/core';
import {AuthProvider} from 'ngx-auth-firebaseui-folio';

export class ExampleComponent implements OnInit {

  providers = AuthProvider;

  ngOnInit() {
  }
}

in your template -->

  <ngx-auth-firebaseui
  [providers]="[providers.Google, providers.Facebook, providers.Twitter]"
  (onSuccess)="printUser($event)"
   (onError)="printError()"></ngx-auth-firebaseui>

or

  <ngx-auth-firebaseui
  [providers]="['google', 'facebook', 'twitter']"
  (onSuccess)="printUser($event)"
  (onError)="printError()">
</ngx-auth-firebaseui>

take a look at the full documentation here

<ngx-auth-firebaseui-providers></ngx-auth-firebaseui-providers>

optionbindtypedefaultdescription
layoutInput()stringrowset the layout of the providers buttons options: 'column' or 'row'
themeInput()stringdefaultset the theme of the providers buttons options: '', 'classic', 'stroked', 'fab', 'mini-fab', 'raised',
onSuccessOutput()any-this will be fired when an authentication process was success. The authenticated user is emitted!
onErrorOutput()any-this event will be fired when an error occurred during the authentication process! An error message is emitted!

e.g: in template:

<ngx-auth-firebaseui-providers [theme]="themes.CLASSIC"></ngx-auth-firebaseui-providers>
<ngx-auth-firebaseui-providers [theme]="themes.STROKED"></ngx-auth-firebaseui-providers>
<ngx-auth-firebaseui-providers [theme]="themes.RAISED"></ngx-auth-firebaseui-providers>
<ngx-auth-firebaseui-providers [theme]="themes.FAB"></ngx-auth-firebaseui-providers>
<ngx-auth-firebaseui-providers [theme]="themes.MINI_FAB"></ngx-auth-firebaseui-providers>

in your component:

import {Component} from '@angular/core';
import {AuthProvider, Theme} from 'ngx-auth-firebaseui-folio';

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {

  themes = Theme;
}

<ngx-auth-firebaseui-user></ngx-auth-firebaseui-user>

optionbindtypedefaultdescription
editModeInput()booleanfalsewhether the use is in edit mode
canLogoutInput()booleantruewhether to render the logout button
canDeleteAccountInput()booleantruewhether to render the delete account button
appearanceInput()MatFormFieldAppearance-the style of the mat-input-form
onSignOutOutput()void-this will be fired when the user signs out
onAccountDeletedOutput()void-this will be fired when the user deletes his account

<ngx-auth-firebaseui-avatar></ngx-auth-firebaseui-avatar>

optionbindtypedefaultdescription
canLogoutInput()booleantruewhether to render the logout button
linksInput()LinkMenuItem[]-additional routes and links to add to the component
onSignOutOutput()void-this will be fired when the user signs out

EXTRA TIP: Login Authentication Guard

If you want to prevent a route to be accessed from non authorized users, you can use a built in LoggedInGuard angular router guard.

  1. enter the fallback url in the NgxAuthFirebaseUIConfig under authGuardFallbackURL
  2. enter the logged in url in the NgxAuthFirebaseUIConfig under authGuardLoggedInURL
import {NgxAuthFirebaseUIModule} from 'ngx-auth-firebaseui-folio';


NgxAuthFirebaseUIModule.forRoot(firebaseKey, firebaseAppNameFactory,
    {
      authGuardFallbackURL: 'examples/logged-out',
      authGuardLoggedInURL: 'examples/logged-in',
    }),

if the user is logged in, he will be redirected to examples/logged-in route (per example), otherwise he will be redirected to the examples/logged-out route

  1. import the LoggedInGuard in your router module
import {NgModule} from '@angular/core';
import {Routes, RouterModule} from '@angular/router';

import {LoggedInGuard} from 'ngx-auth-firebaseui-folio';

const routes: Routes = [
  {
    path: '',
    redirectTo: 'home',
    pathMatch: 'full'
  },
  {
    path: 'secured',
    loadChildren: 'app/secured/secured.module#SecuredModule',
    canActivate: [LoggedInGuard]
  }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule {
}

Other Angular Libraries


Support

  • Drop an email to: Anthony Nahas
  • or open an appropriate issue
  • let us chat on Gitter

    Built by and for developers :heart: we will help you :punch:


jetbrains logo

This project is supported by jetbrains with 1 ALL PRODUCTS PACK OS LICENSE incl. webstorm


License

Copyright (c) 2018 Anthony Nahas. Licensed under the MIT License (MIT)