ngx-firebase-auth
Version:
Simple lightweight Firebase Authentication Service for Angular 12+
119 lines • 12.9 kB
JavaScript
import { Injectable } from '@angular/core';
import firebase from 'firebase/compat/app';
import { shareReplay } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "@angular/fire/compat/auth";
export class NgxFirebaseAuthService {
constructor(afAuth) {
this.afAuth = afAuth;
this.authState = null;
this.afAuth.authState.subscribe((authState) => {
this.authState = authState;
});
}
/**
* Get the current User Observable from AngularFireAuth
* @return Observable<FirebaseUser> if the user is authenticated.
*/
get currentUser$() {
return this.afAuth.authState.pipe(shareReplay());
}
/**
* Gets the current user.
* @return The user or null if the user is not authenticated.
*/
get currentUser() {
return this.authState;
}
/**
* Gets the current user id.
* @return The user id or null if the user is not authenticated.
*/
get currentUserId() {
return this.currentUser ? this.currentUser.uid : '';
}
/**
* Checks is the user is authenticated.
* @return True if the user is authenticated.
*/
get authenticated() {
return this.authState != null;
}
/**
* Checks if the user email is verified.
* @return True if the user is authorized.
*/
get isVerified() {
return this.currentUser && this.currentUser.emailVerified;
}
/**
* Register the user.
* @param context The register parameters.
* @return The user credentials.
*/
register(context) {
return this.afAuth.createUserWithEmailAndPassword(context.email, context.password);
}
/**
* Login the user.
* @param context The login parameters.
* @return The user credentials.
*/
login(context) {
return this.afAuth.signInWithEmailAndPassword(context.email, context.password);
}
/**
* Logs out the user and clear credentials.
* @return void
*/
logout() {
// Customize credentials invalidation here
return this.afAuth.signOut();
}
/**
* Sends Email Verification e.g. after registration.
* @return void
*/
sendEmailVerification() {
const currentUser = firebase.auth().currentUser;
if (currentUser) {
return currentUser.sendEmailVerification();
}
return new Promise(async (_, reject) => reject('Could not call sendEmailVerification - No User available!'));
}
/**
* Sends reset password mail
* @return void
*/
sendPasswordResetEmail(email) {
return this.afAuth.sendPasswordResetEmail(email);
}
/**
* Reauthenticate an user, e.g. when updating user email
* @return return new firebase user
*/
reauthenticateUser(password) {
const firebaseUser = this.currentUser;
if (firebaseUser?.email != null) {
const credentials = firebase.auth.EmailAuthProvider.credential(firebaseUser.email, password);
return new Promise((resolve, reject) => {
firebaseUser.reauthenticateWithCredential(credentials).then(() => {
resolve(firebaseUser);
}).catch((err) => {
console.log(err);
reject('Verification failed');
});
});
}
return new Promise((_, reject) => reject('Could not call reauthenticateUser - No User available!'));
}
}
NgxFirebaseAuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: NgxFirebaseAuthService, deps: [{ token: i1.AngularFireAuth }], target: i0.ɵɵFactoryTarget.Injectable });
NgxFirebaseAuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: NgxFirebaseAuthService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: NgxFirebaseAuthService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: i1.AngularFireAuth }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZpcmViYXNlLWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1maXJlYmFzZS1hdXRoL3NyYy9saWIvbmd4LWZpcmViYXNlLWF1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sUUFBUSxNQUFNLHFCQUFxQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBTzdDLE1BQU0sT0FBTyxzQkFBc0I7SUE0Q2pDLFlBQW9CLE1BQXVCO1FBQXZCLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQStCLEVBQUUsRUFBRTtZQUNsRSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUEvQ0Q7OztPQUdHO0lBQ0gsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO0lBQzVELENBQUM7SUFXRDs7OztPQUlHO0lBQ0ksUUFBUSxDQUFDLE9BQW9CO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxPQUFvQjtRQUMvQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU07UUFDWCwwQ0FBMEM7UUFDMUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSSxxQkFBcUI7UUFDMUIsTUFBTSxXQUFXLEdBQXlCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFDdEUsSUFBSSxXQUFXLEVBQUU7WUFDZixPQUFPLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQzVDO1FBRUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLDJEQUEyRCxDQUFDLENBQUMsQ0FBQztJQUMvRyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksc0JBQXNCLENBQUMsS0FBYTtRQUN6QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGtCQUFrQixDQUFDLFFBQWdCO1FBQ3hDLE1BQU0sWUFBWSxHQUF5QixJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVELElBQUksWUFBWSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDL0IsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3RixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNyQyxZQUFZLENBQUMsNEJBQTRCLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDL0QsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNqQixNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyx3REFBd0QsQ0FBQyxDQUFDLENBQUM7SUFDdEcsQ0FBQzs7bUhBdEhVLHNCQUFzQjt1SEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuZ3VsYXJGaXJlQXV0aCB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvY29tcGF0L2F1dGgnO1xuaW1wb3J0IGZpcmViYXNlIGZyb20gJ2ZpcmViYXNlL2NvbXBhdC9hcHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdXRoQ29udGV4dCB9IGZyb20gJy4vbW9kZWxzL2F1dGhDb250ZXh0JztcbmltcG9ydCBVc2VyID0gZmlyZWJhc2UuVXNlcjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5neEZpcmViYXNlQXV0aFNlcnZpY2Uge1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgVXNlciBPYnNlcnZhYmxlIGZyb20gQW5ndWxhckZpcmVBdXRoXG4gICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxGaXJlYmFzZVVzZXI+IGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1cnJlbnRVc2VyJCgpOiBPYnNlcnZhYmxlPFVzZXIgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuYWZBdXRoLmF1dGhTdGF0ZS5waXBlKHNoYXJlUmVwbGF5KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdXNlci5cbiAgICogQHJldHVybiBUaGUgdXNlciBvciBudWxsIGlmIHRoZSB1c2VyIGlzIG5vdCBhdXRoZW50aWNhdGVkLlxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50VXNlcigpOiBmaXJlYmFzZS5Vc2VyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdXNlciBpZC5cbiAgICogQHJldHVybiBUaGUgdXNlciBpZCBvciBudWxsIGlmIHRoZSB1c2VyIGlzIG5vdCBhdXRoZW50aWNhdGVkLlxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50VXNlcklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXIgPyB0aGlzLmN1cnJlbnRVc2VyLnVpZCA6ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpcyB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLlxuICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgYXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoU3RhdGUgIT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHVzZXIgZW1haWwgaXMgdmVyaWZpZWQuXG4gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdXNlciBpcyBhdXRob3JpemVkLlxuICAgKi9cbiAgcHVibGljIGdldCBpc1ZlcmlmaWVkKCk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VXNlciAmJiB0aGlzLmN1cnJlbnRVc2VyLmVtYWlsVmVyaWZpZWQ7XG4gIH1cblxuICBwcml2YXRlIGF1dGhTdGF0ZTogZmlyZWJhc2UuVXNlciB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhZkF1dGg6IEFuZ3VsYXJGaXJlQXV0aCkge1xuICAgIHRoaXMuYXV0aFN0YXRlID0gbnVsbDtcbiAgICB0aGlzLmFmQXV0aC5hdXRoU3RhdGUuc3Vic2NyaWJlKChhdXRoU3RhdGU6IGZpcmViYXNlLlVzZXIgfCBudWxsKSA9PiB7XG4gICAgICB0aGlzLmF1dGhTdGF0ZSA9IGF1dGhTdGF0ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciB0aGUgdXNlci5cbiAgICogQHBhcmFtIGNvbnRleHQgVGhlIHJlZ2lzdGVyIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm4gVGhlIHVzZXIgY3JlZGVudGlhbHMuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXIoY29udGV4dDogQXV0aENvbnRleHQpOiBQcm9taXNlPGZpcmViYXNlLmF1dGguVXNlckNyZWRlbnRpYWw+IHtcbiAgICByZXR1cm4gdGhpcy5hZkF1dGguY3JlYXRlVXNlcldpdGhFbWFpbEFuZFBhc3N3b3JkKGNvbnRleHQuZW1haWwsIGNvbnRleHQucGFzc3dvcmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ2luIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gY29udGV4dCBUaGUgbG9naW4gcGFyYW1ldGVycy5cbiAgICogQHJldHVybiBUaGUgdXNlciBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBsb2dpbihjb250ZXh0OiBBdXRoQ29udGV4dCk6IFByb21pc2U8ZmlyZWJhc2UuYXV0aC5Vc2VyQ3JlZGVudGlhbD4ge1xuICAgIHJldHVybiB0aGlzLmFmQXV0aC5zaWduSW5XaXRoRW1haWxBbmRQYXNzd29yZChjb250ZXh0LmVtYWlsLCBjb250ZXh0LnBhc3N3b3JkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dzIG91dCB0aGUgdXNlciBhbmQgY2xlYXIgY3JlZGVudGlhbHMuXG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgcHVibGljIGxvZ291dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDdXN0b21pemUgY3JlZGVudGlhbHMgaW52YWxpZGF0aW9uIGhlcmVcbiAgICByZXR1cm4gdGhpcy5hZkF1dGguc2lnbk91dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIEVtYWlsIFZlcmlmaWNhdGlvbiBlLmcuIGFmdGVyIHJlZ2lzdHJhdGlvbi5cbiAgICogQHJldHVybiB2b2lkXG4gICAqL1xuICBwdWJsaWMgc2VuZEVtYWlsVmVyaWZpY2F0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyOiBmaXJlYmFzZS5Vc2VyIHwgbnVsbCA9IGZpcmViYXNlLmF1dGgoKS5jdXJyZW50VXNlcjtcbiAgICBpZiAoY3VycmVudFVzZXIpIHtcbiAgICAgIHJldHVybiBjdXJyZW50VXNlci5zZW5kRW1haWxWZXJpZmljYXRpb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKF8sIHJlamVjdCkgPT4gcmVqZWN0KCdDb3VsZCBub3QgY2FsbCBzZW5kRW1haWxWZXJpZmljYXRpb24gLSBObyBVc2VyIGF2YWlsYWJsZSEnKSk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgcmVzZXQgcGFzc3dvcmQgbWFpbFxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIHB1YmxpYyBzZW5kUGFzc3dvcmRSZXNldEVtYWlsKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hZkF1dGguc2VuZFBhc3N3b3JkUmVzZXRFbWFpbChlbWFpbCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhdXRoZW50aWNhdGUgYW4gdXNlciwgZS5nLiB3aGVuIHVwZGF0aW5nIHVzZXIgZW1haWxcbiAgICogQHJldHVybiByZXR1cm4gbmV3IGZpcmViYXNlIHVzZXJcbiAgICovXG4gIHB1YmxpYyByZWF1dGhlbnRpY2F0ZVVzZXIocGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8ZmlyZWJhc2UuVXNlcj4ge1xuICAgIGNvbnN0IGZpcmViYXNlVXNlcjogZmlyZWJhc2UuVXNlciB8IG51bGwgPSB0aGlzLmN1cnJlbnRVc2VyO1xuICAgIGlmIChmaXJlYmFzZVVzZXI/LmVtYWlsICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gZmlyZWJhc2UuYXV0aC5FbWFpbEF1dGhQcm92aWRlci5jcmVkZW50aWFsKGZpcmViYXNlVXNlci5lbWFpbCwgcGFzc3dvcmQpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgZmlyZWJhc2VVc2VyLnJlYXV0aGVudGljYXRlV2l0aENyZWRlbnRpYWwoY3JlZGVudGlhbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoZmlyZWJhc2VVc2VyKTtcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgcmVqZWN0KCdWZXJpZmljYXRpb24gZmFpbGVkJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHJlamVjdCgnQ291bGQgbm90IGNhbGwgcmVhdXRoZW50aWNhdGVVc2VyIC0gTm8gVXNlciBhdmFpbGFibGUhJykpO1xuICB9XG59XG4iXX0=