Anonymous authentication uses only a userID to login without registration. Once signing out, user will not be able to log back in. In this tutorial, we’re gonna look at way to implement Anonymous authentication with AngularFire2 v4.
Related Post:
How to integrate Firebase with Angular 4
More Practice:
Angular 4 Firebase Auth – Email/Password Authentication with AngularFire2 v4
I. Technology
– Angular 4
– AngularFire2 4.0
II. Overview
We will build an Angular 4 App that allows user login anonymously:
II. How to do
1. Set up the Firebase Project & Install AngularFire2
Please visit this post to know step by step.
2. Enable Firebase Auth for Anonymous
Go to your Project on Firebase Console -> Authentication tab -> SIGN-IN METHOD -> enable Anonymous:
3. Auth Service
import {AngularFireAuth} from 'angularfire2/auth'; @Injectable() export class AuthService { authState: any = null; constructor(private afAuth: AngularFireAuth) { this.afAuth.authState.subscribe((auth) => { this.authState = auth }); } get isUserAnonymousLoggedIn(): boolean { return (this.authState !== null) ? this.authState.isAnonymous : false } get currentUserId(): string { return (this.authState !== null) ? this.authState.uid : ''; } anonymousLogin() { return this.afAuth.auth.signInAnonymously() .then((user) => { this.authState = user }) .catch(error => console.log(error)); } signOut(): void { this.afAuth.auth.signOut(); } } |
– We subscribe to the AngularFire auth
observable that returns a FirebaseAuthState
object. This object is null when logging out, and contains useful User Information (UID, Display Name, Photo URL…) when logging in.
– We use:
+ AngularFireAuth.auth.signInAnonymously()
to log in.
+ AngularFireAuth.auth.signOut()
to log out.
4. App Module
import {AngularFireModule} from 'angularfire2'; import {AngularFireAuthModule} from 'angularfire2/auth'; import {AuthService} from './auth/auth.service'; @NgModule({ // ... imports: [ AngularFireModule.initializeApp(environment.firebase), AngularFireAuthModule ], providers: [AuthService], // ... }) |
III. Practice
1. Project structure
2. App Module
import {environment} from '../environments/environment'; import {BrowserModule} from '@angular/platform-browser'; import {NgModule} from '@angular/core'; import {AppRoutingModule} from './app-routing.module'; import {AngularFireModule} from 'angularfire2'; import {AngularFireAuthModule} from 'angularfire2/auth'; import {AuthService} from './auth/auth.service'; import {AppComponent} from './app.component'; import {UserLoginComponent} from './auth/user-login/user-login.component'; import {UserInfoComponent} from './auth/user-info/user-info.component'; @NgModule({ declarations: [ AppComponent, UserLoginComponent, UserInfoComponent ], imports: [ BrowserModule, AppRoutingModule, AngularFireModule.initializeApp(environment.firebase), AngularFireAuthModule ], providers: [AuthService], bootstrap: [AppComponent] }) export class AppModule {} |
3. Auth Service
import {Injectable} from '@angular/core'; import {Router} from '@angular/router'; import {AngularFireAuth} from 'angularfire2/auth'; @Injectable() export class AuthService { authState: any = null; constructor(private afAuth: AngularFireAuth, private router: Router) { this.afAuth.authState.subscribe((auth) => { this.authState = auth }); } get isUserAnonymousLoggedIn(): boolean { return (this.authState !== null) ? this.authState.isAnonymous : false } get currentUserId(): string { return (this.authState !== null) ? this.authState.uid : ''; } anonymousLogin() { return this.afAuth.auth.signInAnonymously() .then((user) => { this.authState = user }) .catch(error => console.log(error)); } signOut(): void { this.afAuth.auth.signOut(); this.router.navigate(['/']) } } |
4. Components
4.1 User Login Component
user-login.component.ts
import {Component, OnInit} from '@angular/core'; import {Router} from '@angular/router'; import {AuthService} from '../auth.service'; @Component({ selector: 'user-login', templateUrl: './user-login.component.html', styleUrls: ['./user-login.component.css'] }) export class UserLoginComponent implements OnInit { constructor(public authService: AuthService, private router: Router) {} ngOnInit() { } signInAnonymously() { this.authService.anonymousLogin() .then(() => this.router.navigate(['/'])); } } |
user-login.component.html
<div *ngIf="!authService.isUserAnonymousLoggedIn"> <button (click)="signInAnonymously()">Login</button> </div> |
4.2 User Info Component
user-info.component.ts
import {Component, OnInit} from '@angular/core'; import {AuthService} from '../auth.service'; @Component({ selector: 'user-info', templateUrl: './user-info.component.html', styleUrls: ['./user-info.component.css'] }) export class UserInfoComponent implements OnInit { constructor(public authService: AuthService) {} ngOnInit() { } logout() { this.authService.signOut(); } } |
user-info.component.html
<div *ngIf="authService.isUserAnonymousLoggedIn"> <h5 class="text-primary">User Information</h5> <h4> <strong>UID:</strong> {{ authService.currentUserId }} </h4> <button class="button" (click)="logout()">Logout</button> </div> |
5. App Routing Module
app-routing.module.ts
import {NgModule} from '@angular/core'; import {RouterModule, Routes} from '@angular/router'; import { UserLoginComponent } from './auth/user-login/user-login.component'; const routes: Routes = [ {path: '', redirectTo: 'login', pathMatch: 'full'}, {path: 'login', component: UserLoginComponent}, ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule {} |
6. App Component
app.component.ts
import {Component} from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { title = 'JavaSampleApproach'; description = 'Angular4-Firebase Demo'; } |
app.component.html
<div class="container"> <div style="color: blue; margin-bottom:20px"> <h1>{{title}}</h1> <h3>{{description}}</h3> </div> <user-info></user-info> <router-outlet></router-outlet> </div> |
7. Check Result
Run the App, login and log out several times:
Firebase Console:
IV. Source Code
Angular4FirebaseAuth-anonymous
Last updated on November 29, 2018.