typescript 使用OAuth,匿名和电子邮件/密码的Angular4 Firebase身份验证服务。专为Angular中引入的更改而设计
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了typescript 使用OAuth,匿名和电子邮件/密码的Angular4 Firebase身份验证服务。专为Angular中引入的更改而设计相关的知识,希望对你有一定的参考价值。
import { Injectable } from '@angular/core';
import { AngularFireDatabaseModule, AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database';
import { AngularFireAuth } from 'angularfire2/auth';
import { Router } from "@angular/router";
import * as firebase from 'firebase';
@Injectable()
export class AuthService {
authState: any = null;
constructor(private afAuth: AngularFireAuth,
private db: AngularFireDatabase,
private router:Router) {
this.afAuth.authState.subscribe((auth) => {
this.authState = auth
});
}
// Returns true if user is logged in
get authenticated(): boolean {
return this.authState !== null;
}
// Returns current user data
get currentUser(): any {
return this.authenticated ? this.authState : null;
}
// Returns
get currentUserObservable(): any {
return this.afAuth.authState
}
// Returns current user UID
get currentUserId(): string {
return this.authenticated ? this.authState.uid : '';
}
// Anonymous User
get currentUserAnonymous(): boolean {
return this.authenticated ? this.authState.isAnonymous : false
}
// Returns current user display name or Guest
get currentUserDisplayName(): string {
if (!this.authState) { return 'Guest' }
else if (this.currentUserAnonymous) { return 'Anonymous' }
else { return this.authState['displayName'] || 'User without a Name' }
}
//// Social Auth ////
githubLogin() {
const provider = new firebase.auth.GithubAuthProvider()
return this.socialSignIn(provider);
}
googleLogin() {
const provider = new firebase.auth.GoogleAuthProvider()
return this.socialSignIn(provider);
}
facebookLogin() {
const provider = new firebase.auth.FacebookAuthProvider()
return this.socialSignIn(provider);
}
twitterLogin(){
const provider = new firebase.auth.TwitterAuthProvider()
return this.socialSignIn(provider);
}
private socialSignIn(provider) {
return this.afAuth.auth.signInWithPopup(provider)
.then((credential) => {
this.authState = credential.user
this.updateUserData()
})
.catch(error => console.log(error));
}
//// Anonymous Auth ////
anonymousLogin() {
return this.afAuth.auth.signInAnonymously()
.then((user) => {
this.authState = user
this.updateUserData()
})
.catch(error => console.log(error));
}
//// Email/Password Auth ////
emailSignUp(email:string, password:string) {
return this.afAuth.auth.createUserWithEmailAndPassword(email, password)
.then((user) => {
this.authState = user
this.updateUserData()
})
.catch(error => console.log(error));
}
emailLogin(email:string, password:string) {
return this.afAuth.auth.signInWithEmailAndPassword(email, password)
.then((user) => {
this.authState = user
this.updateUserData()
})
.catch(error => console.log(error));
}
// Sends email allowing user to reset password
resetPassword(email: string) {
var auth = firebase.auth();
return auth.sendPasswordResetEmail(email)
.then(() => console.log("email sent"))
.catch((error) => console.log(error))
}
//// Sign Out ////
signOut(): void {
this.afAuth.auth.signOut();
this.router.navigate(['/'])
}
//// Helpers ////
private updateUserData(): void {
// Writes user name and email to realtime db
// useful if your app displays information about users or for admin features
let path = `users/${this.currentUserId}`; // Endpoint on firebase
let data = {
email: this.authState.email,
name: this.authState.displayName
}
this.db.object(path).update(data)
.catch(error => console.log(error));
}
}
以上是关于typescript 使用OAuth,匿名和电子邮件/密码的Angular4 Firebase身份验证服务。专为Angular中引入的更改而设计的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security OAuth2 JWT 匿名令牌