After successfully reading this tutorial, you will be able to manage the user data in local storage.
To understand this topic thoroughly, we will need the following frameworks, npm packages, and database set up in our system.
However, if you are an absolute beginner, then I would suggest you should go through by the following tutorials.
Setup Angular App
Run the given below command to set up a basic Angular project.
ng new angular-local-storage
Get into the project directory.
cd angular-local-storage
No Property Access From Index Signature
To resolve error:
Property ‘xxxName’ comes from an index signature, so it must be accessed with [‘xxxName’]
This setting makes sure profound consistency between accessing a field via the “dot” (obj.key)
syntax, and “indexed” (obj["key"])
and the way which the property is declared in the type.
Without this flag, TypeScript will allow you to use the dot syntax to access fields which are not defined:
Make sure to set noPropertyAccessFromIndexSignature property to false under compilerOptions in tsconfig.json file:
"compilerOptions": {
...
...
"strict": false,
"noPropertyAccessFromIndexSignature": false,
...
...
}
npm install @angular/fire firebase@9.16.0 --legacy-peer-deps
Next, create environments/ folder and environment.ts file, after that add the following code in the file.
export const environment = {
production: false,
firebaseConfig: {
apiKey: "xxxxxx-xxxxxx_xxxxxxxxxxxxxxxxxx",
authDomain: "xxxxxx_xxxxxxxxxxxxxxxxxx",
databaseURL: "xxxxxx_xxxxxxxxxxxxxxxxxx",
projectId: "xxxxxx_xxxxxxxxxxxxxxxxxx",
storageBucket: "xxxxxx_xxxxxxxxxxxxxxxxxx",
messagingSenderId: "xxxxxxxxxxxxxxxxxx",
appId: "1:xxxxxxxxxxxxxxxxxx:web:xxxxxxxxxxxxxxxxxx"
}
};
What is Local Storage?
Local storage is an HTML5 mechanism to store the data in the web browser, and it allows the user to manage and store the data in the browser. It works even when there is no internet connection available.
You can still see your data even if you refresh the web page.
Create Auth Service in Angular
We are going to create an auth service file to create the login authentication service with Angular and Firebase.
In this service file, we’ll write the following methods to show you the demo for local storage in Angular.
- Login with Google
- Sign-in with email/password
- Storing user state in local storage when a user logged in
- Removing user state from local storage when a user logged out
Generate Angular Authentication Service File
Enter the below command to create the authentication service in Angular project.
ng g s shared/authentication
Importing AngularFire2 Authentication Service Libraries
Once the authentication.service.ts
file is created, then you should get into the authentication file in shared folder and import the following AngularFire 2 services.
import { Injectable } from '@angular/core';
import { GoogleAuthProvider } from 'firebase/auth';
import { AngularFireAuth } from '@angular/fire/compat/auth';
Now declare a variable in AuthenticationService class, this variable will hold the user state.
userState: any;
Angular Storing the User State in Local Storage
To store the user state in Angular local storage mechanism, inject the AngularFireAuth service in the constructor class.
As you can see in the below example if the user is signed in then, we are storing the user data as a JSON object in the local storage and removing the user data when the user is logged out.
constructor(
public afAuth: AngularFireAuth
) {
this.afAuth.authState.subscribe(user => {
if (user) {
this.userState = user;
localStorage.setItem('user', JSON.stringify(this.userState));
JSON.parse(localStorage.getItem('user'));
} else {
localStorage.setItem('user', null);
JSON.parse(localStorage.getItem('user'));
}
})
}
Create Sign-in with Google
Let’s create Auth provider function, this function will help us to log-in with google auth service.
// Auth provider
AuthLogin(provider) {
return this.afAuth.signInWithPopup(provider)
.then((res) => {
console.log(res)
}).catch((error) => {
console.log(error)
})
}
GoogleAuth() {
return this.AuthLogin(new GoogleAuthProvider());
}
AngularFire2 Sign-in with email/password
Add the following code in authentication.service.ts file, to create sign-in with Google using Firebase auth and Angular.
// Sign-in with email/password
SignIn(email, password) {
return this.afAuth.signInWithEmailAndPassword(email, password)
.then((res) => {
console.log(res)
}).catch((error) => {
console.log(error)
})
}
Remove User State from Local Storage
In the following example you can check out how to remove user state from local storage when the user logged out from the Angular application.
SignOut() {
return this.afAuth.signOut().then(() => {
localStorage.removeItem('user');
})
}
Final Authentication Service
Open the app.module.ts file, paste the below code line by line in the file.
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { AngularFireModule } from '@angular/fire/compat';
import { environment } from './environments/environment';
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
AppRoutingModule,
FormsModule,
ReactiveFormsModule,
AngularFireModule.initializeApp(environment.firebaseConfig),
],
providers: [],
bootstrap: [AppComponent],
})
export class AppModule {}
This is the final authentication.service.ts
file for our Angular local storage tutorial.
import { Injectable } from '@angular/core';
import { GoogleAuthProvider } from 'firebase/auth';
import { AngularFireAuth } from '@angular/fire/compat/auth';
@Injectable({
providedIn: 'root',
})
export class AuthenticationService {
userState: any;
constructor(public afAuth: AngularFireAuth) {
this.afAuth.authState.subscribe((user) => {
if (user) {
this.userState = user;
localStorage.setItem('user', JSON.stringify(this.userState));
JSON.parse(localStorage.getItem('user'));
} else {
localStorage.setItem('user', null);
JSON.parse(localStorage.getItem('user'));
}
});
}
// Auth provider
AuthLogin(provider) {
return this.afAuth
.signInWithPopup(provider)
.then((res) => {
console.log(res);
})
.catch((error) => {
console.log(error);
});
}
// Login with Google
GoogleAuth() {
return this.AuthLogin(new GoogleAuthProvider());
}
// Signin with email/password
SignIn(email, password) {
return this.afAuth
.signInWithEmailAndPassword(email, password)
.then((res) => {
console.log(res);
})
.catch((error) => {
console.log(error);
});
}
// Sign out
SignOut() {
return this.afAuth.signOut().then(() => {
localStorage.removeItem('user');
});
}
}
Implement Authentication Service in Angular Template
Now we are going to implement auth service in app HTML template. Go to app.component.ts
file and include the following code.
import { Component } from '@angular/core';
import { AuthenticationService } from './shared/authentication.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
constructor(public auth: AuthenticationService) {}
}
Go to app.component.html
file and include the following code.
<!-- // Login with Google -->
<button (click)="auth.GoogleAuth()">Sign-in with Google</button>
<!-- // Logout -->
<button (click)="auth.SignOut()">Sign-out</button>
Now we are all set to store the user data in the local storage, click on the sign-in with google button and check your browser’s console.
Run the following command to serve your app locally:
ng serve --open
Open a web browser and navigate to:
http://localhost:4200/
In the same way if you click on the sign-out button, user data will be removed from the local storage.
Finally, we are done with Angular and AngularFire2 Local Storage example tutorial.
Don’t forget to share this tutorial with others as well.