[Angular] AuthService and AngularFire integration
Config AngularFire, we need database and auth module from firebase.
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {RouterModule, Routes} from '@angular/router';
import {AngularFireModule, FirebaseAppConfig} from 'angularfire2';
import {AngularFireAuthModule} from 'angularfire2/auth';
import {AngularFireDatabaseModule} from 'angularfire2/database';
import {SharedModule} from './shared/shared.module';
export const ROUTES: Routes = [
{
path: 'auth',
children: [
{path: '', pathMatch: 'full', redirectTo: 'login'},
{path: 'login', loadChildren: './login/login.module#LoginModule'},
{path: 'register', loadChildren: './register/register.module#RegisterModule'}
]
}
];
export const forebaseConfig: FirebaseAppConfig = {
apiKey: "xxxxxxxx",
authDomain: "fitness-app-a26ed.firebaseapp.com",
databaseURL: "https://fitness-app-a26ed.firebaseio.com",
projectId: "fitness-app-a26ed",
storageBucket: "fitness-app-a26ed.appspot.com",
messagingSenderId: "781493219422"
};
@NgModule({
imports: [
CommonModule,
AngularFireModule.initializeApp(forebaseConfig),
AngularFireAuthModule,
AngularFireDatabaseModule,
SharedModule,
RouterModule.forChild(ROUTES)
]
})
export class AuthModule {}
For the SharedModule:
import {ModuleWithProviders, NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {ReactiveFormsModule} from '@angular/forms';
import { AuthFormComponent } from './components/auth-form/auth-form.component';
import {AuthService} from './services/auth/auth.service';
@NgModule({
imports: [
CommonModule,
ReactiveFormsModule
],
declarations: [
AuthFormComponent
],
exports: [
AuthFormComponent
]
})
export class SharedModule {
// We don't want multi instance for AuthService, so we need forRoot method
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [
AuthService
]
}
}
}
We use forRoot method to register our AuthSerivce, so there won't be multi instances for it.
But in the AuthModule, we need to change a little bit:
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {RouterModule, Routes} from '@angular/router';
import {AngularFireModule, FirebaseAppConfig} from 'angularfire2';
import {AngularFireAuthModule} from 'angularfire2/auth';
import {AngularFireDatabaseModule} from 'angularfire2/database';
import {SharedModule} from './shared/shared.module';
export const ROUTES: Routes = [
{
path: 'auth',
children: [
{path: '', pathMatch: 'full', redirectTo: 'login'},
{path: 'login', loadChildren: './login/login.module#LoginModule'},
{path: 'register', loadChildren: './register/register.module#RegisterModule'}
]
}
];
export const forebaseConfig: FirebaseAppConfig = {
apiKey: "xxxxxxxx",
authDomain: "fitness-app-a26ed.firebaseapp.com",
databaseURL: "https://fitness-app-a26ed.firebaseio.com",
projectId: "fitness-app-a26ed",
storageBucket: "fitness-app-a26ed.appspot.com",
messagingSenderId: "781493219422"
};
@NgModule({
imports: [
CommonModule,
AngularFireModule.initializeApp(forebaseConfig),
AngularFireAuthModule,
AngularFireDatabaseModule,
SharedModule.forRoot(),
RouterModule.forChild(ROUTES)
]
})
export class AuthModule {}
AuthService is the serivce which talk to Firebase Auth Module:
import {Injectable} from '@angular/core';
import {AngularFireAuth} from 'angularfire2/auth';
@Injectable()
export class AuthService {
constructor(
private af: AngularFireAuth
) {
}
createUser(email: string, password: string) {
return this.af.auth.createUserWithEmailAndPassword(email, password);
}
loginUser(email: string, password: string) {
return this.af.auth.signInWithEmailAndPassword(email, password)
}
}
Register user:
import {Component} from '@angular/core';
import {FormGroup} from '@angular/forms';
import {AuthService} from '../../../shared/services/auth/auth.service';
@Component({
selector: 'register',
template: `
<div>
<auth-form (submitted)="registerUser($event)">
<h1>Register</h1>
<a routerLink="/auth/login">Already have an account?</a>
<button type="submit">Create account</button>
<div class="error" *ngIf="error">
{{error}}
</div>
</auth-form>
</div>
`
})
export class RegisterComponent {
error: string;
constructor(
private authService: AuthService
) {
}
async registerUser(event: FormGroup) {
const {email, password} = event.value;
try {
await this.authService.createUser(email, password);
} catch(err) {
this.error = err.message;
}
}
}
login user:
import {Component} from '@angular/core';
import {FormGroup} from '@angular/forms';
import {AuthService} from '../../../shared/services/auth/auth.service';
@Component({
selector: 'login',
template: `
<div>
<auth-form (submitted)="loginUser($event)">
<h1>Login</h1>
<a routerLink="/auth/register">Not registered?</a>
<button type="submit">Login</button>
<div class="error" *ngIf="error">
{{error}}
</div>
</auth-form>
</div>
`
})
export class LoginComponent {
error: string;
constructor(
private authService: AuthService
) {
}
async loginUser(event: FormGroup) {
const {email, password} = event.value;
try {
await this.authService.loginUser(email, password);
} catch(err) {
this.error = err.message;
}
}
}
[Angular] AuthService and AngularFire integration的更多相关文章
- [AngularFire 2 ] Hello World - How To Write your First Query using AngularFire 2 List Observables ?
In this lesson we are going to use AngularFire 2 for the first time. We are going to configure the A ...
- Angular 2 技能图谱skill-map
# Angular 2 技能图谱 ## 模块 ### 自定义模块 - 根模块 - 特性模块 - 共享模块 - 核心模块 ### 内置模块 - ApplicationModule 模块 - Common ...
- [Angular] Reactive Store and AngularFire Observables
A simple store implemenet: import { Observable } from 'rxjs/Observable'; import { BehaviorSubject } ...
- [AngularFire] Angular File Uploads to Firebase Storage with Angular control value accessor
The upload class will be used in the service layer. Notice it has a constructor for file attribute, ...
- angular单元测试与自动化UI测试实践
关于本文:介绍通过karma与jsmine框架对angular开发的应用程序进行单元与E2E测试. angular单元测试与集成测试实践 先决条件 创建项目 webstorm中创建空白web项目 创建 ...
- Angular+Grunt+Bower+Karma+Protractor (Atom)
1. 配置bower 1.安装bower npm install -g bower 2.创建.bowerrc文件 { "directory": "src/bower&qu ...
- angular测试-Karma + Jasmine配置
首先讲一下大致的流程: 需要node环境,首先先要安装node,node不会?请自行搜索.版本>0.8 安装node完成之后先要测试下npm是否测试通过,如下图所示 首先看下目录结构 目录为:F ...
- angular run()运行块
和配置块不同,运行块在注入器创建之后被执行,它是所有AngularJS应用中第一个被执行的方法. 运行块是AngularJS中与main方法最接近的概念.运行块中的代码块通常很难进行单元测试,它是和应 ...
- Redux你的Angular 2应用--ngRx使用体验
Angular2和Rx的相关知识可以看我的Angular 2.0 从0到1系列第一节:Angular 2.0 从0到1 (一)第二节:Angular 2.0 从0到1 (二)第三节:Angular 2 ...
随机推荐
- Android学习笔记(三)
ContentProvider简单介绍 ContentProvider是不同应用程序之间进行数据交换的标准API,当一个应用程序须要把自己的数据暴露给其它程序使用时.该应用程序便可通过提供Conten ...
- ORA-00922: 选项缺失或无效
1.错误描写叙述 SQL> create table info_stu from select t.stu_id,t.stu_name,t.stu_age from info t; create ...
- CSS Text
http://www.runoob.com/css/css-text.html 文本颜色 颜色属性被用来设置文字的颜色. 颜色是通过CSS最经常的指定: 十六进制值 - 如: #FF0000 一个RG ...
- layer:web弹出层解决方案
layer:web弹出层解决方案 一.总结 一句话总结:http://layer.layui.com/ 1.layer中弹出层tips的使用(代码)是怎样的? 使用还是比较简单方便的 //tips层- ...
- 深入浅出微服务框架dubbo(一):基础篇
一.基础篇 1.1 开篇说明 dubbo是一个分布式服务框架,致力于提供高性能透明化RPC远程调用方案,提供SOA服务治理解决方案.本文旨在将对dubbo的使用和学习总结起来,深入源码探究原理,以备今 ...
- Looksery Cup 2015
A题水 C题 博弈论,如果不是CF有WA具体哪个点错了和数据的话,AC要难许多. 如果D的操作数大于奇数个数直接Win 偶数个数大于等于n – k 时,S直接Win 偶数个数小于n – k时,若D操作 ...
- 在电子商务里,一般会提到这样几个词:商品、单品、SPU、SKU
简单理解一下,SPU是标准化产品单元,区分品种:SKU是库存量单位,区分单品:商品特指与商家有关的商品,可对应多个SKU. 首先,搞清楚商品与单品的区别.例如,iphone是一个单品,但是在淘宝上当很 ...
- sql创建外键
建立外键关系:先建主表再见从表:主表:create table zhu(code int parimary key,name varchar(20)) ;从表:create table cong(co ...
- 分享js寄生组合模式继承
function person(){ this.name = 'taobao'; this.showMess = function(){ return this.name; } } person.pr ...
- Kinect 开发 —— Kinect for windows SDK
开发 —— 基本的SDK和Windows 编程技巧(彩色图像视频流,深度图像视频流的采集,骨骼跟踪,音频处理,语音识别API) 深度数据,就是Kinect的精髓和灵魂,很多问题都转换为深度图像的模式识 ...