UNPKG

ngx-firebase-auth

Version:

Simple lightweight Firebase Authentication Service for Angular 12+

119 lines 12.9 kB
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=