Merge pull request #67 from Qolzam/pr/66

[Update Package] Update firebase to version 5.*
This commit is contained in:
Amir Movahedi
2018-06-30 10:02:24 +07:00
committed by GitHub
2 changed files with 687 additions and 247 deletions

View File

@@ -21,80 +21,84 @@ import { injectable } from 'inversify'
@injectable() @injectable()
export class AuthorizeService implements IAuthorizeService { export class AuthorizeService implements IAuthorizeService {
/** /**
* Login the user * Login the user
* */
* @returns {Promise<LoginUser>} public async login(email: string, password: string) {
* @memberof IAuthorizeService try {
*/ const result = await firebaseAuth()
public login: (email: string, password: string) => Promise<LoginUser> = (email, password) => { .signInWithEmailAndPassword(email, password)
const {user} = result
if (user) {
return new LoginUser(user.uid, user.emailVerified)
} else {
throw new SocialError('AuthorizeService/login', 'User object is empty!')
}
return new Promise<LoginUser>((resolve, reject) => { } catch (error) {
firebaseAuth() throw new SocialError(error.code, error.message)
.signInWithEmailAndPassword(email, password) }
.then((result) => {
resolve(new LoginUser(result.uid, result.emailVerified))
})
.catch((error: any) => {
reject(new SocialError(error.code, error.message))
})
})
} }
/** /**
* Logs out the user * Logs out the user
* *
* @returns {Promise<void>} * @returns {Promise<void>}
* @memberof IAuthorizeService * @memberof IAuthorizeService
*/ */
public logout: () => Promise<void> = () => { public logout: () => Promise<void> = () => {
return new Promise<void>((resolve, reject) => { return new Promise<void>((resolve, reject) => {
firebaseAuth() firebaseAuth()
.signOut() .signOut()
.then((result) => { .then((result) => {
resolve() resolve()
}) })
.catch((error: any) => { .catch((error: any) => {
reject(new SocialError(error.code, error.message)) reject(new SocialError(error.code, error.message))
}) })
}) })
} }
/** /**
* Register a user * Register a user
* */
* @returns {Promise<void>} public async registerUser(registerUser: User) {
* @memberof IAuthorizeService try {
*/ const result = await firebaseAuth()
public registerUser: (user: User) => Promise<RegisterUserResult> = (user) => { .createUserWithEmailAndPassword(registerUser.email as string, registerUser.password as string)
return new Promise<RegisterUserResult>((resolve, reject) => { const {user} = result
firebaseAuth() if (user) {
.createUserWithEmailAndPassword(user.email as string, user.password as string) const { uid, email } = user
.then((signupResult) => { const registerResult = await this.storeUserInformation(uid, email!, registerUser.fullName, '')
const {uid, email} = signupResult return registerResult
this.storeUserInformation(uid,email,user.fullName,'').then(resolve)
}) } else {
.catch((error: any) => reject(new SocialError(error.code, error.message))) throw new SocialError('AuthorizeService/login', 'User object is empty!')
}) }
} catch (error) {
throw new SocialError(error.code, error.message)
}
} }
/** /**
* Update user password * Update user password
* *
* @returns {Promise<void>} * @returns {Promise<void>}
* @memberof IAuthorizeService * @memberof IAuthorizeService
*/ */
public updatePassword: (newPassword: string) => Promise<void> = (newPassword) => { public updatePassword: (newPassword: string) => Promise<void> = (newPassword) => {
return new Promise<void>((resolve, reject) => { return new Promise<void>((resolve, reject) => {
let user = firebaseAuth().currentUser let user = firebaseAuth().currentUser
if (user) { if (user) {
user.updatePassword(newPassword).then(() => { user.updatePassword(newPassword).then(() => {
// Update successful. // Update successful.
resolve() resolve()
}).catch((error: any) => { }).catch((error: any) => {
// An error happened. // An error happened.
reject(new SocialError(error.code, error.message)) reject(new SocialError(error.code, error.message))
}) })
} }
@@ -108,7 +112,7 @@ export class AuthorizeService implements IAuthorizeService {
* @memberof IAuthorizeService * @memberof IAuthorizeService
*/ */
public onAuthStateChanged: (callBack: (isVerifide: boolean, user: User) => void) => any = (callBack) => { public onAuthStateChanged: (callBack: (isVerifide: boolean, user: User) => void) => any = (callBack) => {
firebaseAuth().onAuthStateChanged( (user: any) => { firebaseAuth().onAuthStateChanged((user: any) => {
let isVerifide = false let isVerifide = false
if (user) { if (user) {
if (user.emailVerified || user.providerData[0].providerId.trim() !== 'password') { if (user.emailVerified || user.providerData[0].providerId.trim() !== 'password') {
@@ -117,7 +121,7 @@ export class AuthorizeService implements IAuthorizeService {
isVerifide = false isVerifide = false
} }
} }
callBack(isVerifide,user) callBack(isVerifide, user)
}) })
} }
@@ -127,7 +131,7 @@ export class AuthorizeService implements IAuthorizeService {
* @memberof AuthorizeService * @memberof AuthorizeService
*/ */
public resetPassword: (email: string) => Promise<void> = (email) => { public resetPassword: (email: string) => Promise<void> = (email) => {
return new Promise<void>((resolve,reject) => { return new Promise<void>((resolve, reject) => {
let auth = firebaseAuth() let auth = firebaseAuth()
auth.sendPasswordResetEmail(email).then(function () { auth.sendPasswordResetEmail(email).then(function () {
@@ -145,7 +149,7 @@ export class AuthorizeService implements IAuthorizeService {
* @memberof AuthorizeService * @memberof AuthorizeService
*/ */
public sendEmailVerification: () => Promise<void> = () => { public sendEmailVerification: () => Promise<void> = () => {
return new Promise<void>((resolve,reject) => { return new Promise<void>((resolve, reject) => {
let auth = firebaseAuth() let auth = firebaseAuth()
const user = auth.currentUser const user = auth.currentUser
@@ -164,7 +168,7 @@ export class AuthorizeService implements IAuthorizeService {
} }
public loginWithOAuth: (type: OAuthType) => Promise<LoginUser> = (type) => { public loginWithOAuth: (type: OAuthType) => Promise<LoginUser> = (type) => {
return new Promise<LoginUser>((resolve,reject) => { return new Promise<LoginUser>((resolve, reject) => {
let provider: any let provider: any
@@ -179,19 +183,18 @@ export class AuthorizeService implements IAuthorizeService {
provider = new firebaseAuth.GoogleAuthProvider() provider = new firebaseAuth.GoogleAuthProvider()
break break
default: default:
throw new SocialError('authorizeService/loginWithOAuth','None of OAuth type is matched!') throw new SocialError('authorizeService/loginWithOAuth', 'None of OAuth type is matched!')
} }
firebaseAuth().signInWithPopup(provider).then((result) => { firebaseAuth().signInWithPopup(provider).then((result) => {
// This gives you a GitHub Access Token. You can use it to access the GitHub API.
let token = result.credential.accessToken
// The signed-in user info. // The signed-in user info.
const {user} = result const user = result.user!
const {credential} = result const { credential } = result
const {uid, displayName, email, photoURL} = user const { uid, displayName, email, photoURL } = user
const {accessToken, providerId} = credential const { providerId } = credential!
this.storeUserProviderData(uid,email,displayName,photoURL,providerId,accessToken) this.storeUserProviderData(uid, email!, displayName!, photoURL!, providerId, 'No Access token provided!')
// this.storeUserInformation(uid,email,displayName,photoURL).then(resolve) // this.storeUserInformation(uid,email,displayName,photoURL).then(resolve)
resolve(new LoginUser(user.uid,true,providerId,displayName,email,photoURL)) resolve(new LoginUser(user.uid, true, providerId, displayName!, email!, photoURL!))
}).catch(function (error: any) { }).catch(function (error: any) {
// Handle Errors here. // Handle Errors here.
@@ -214,7 +217,7 @@ export class AuthorizeService implements IAuthorizeService {
* @memberof AuthorizeService * @memberof AuthorizeService
*/ */
private storeUserInformation = (userId: string, email: string, fullName: string, avatar: string) => { private storeUserInformation = (userId: string, email: string, fullName: string, avatar: string) => {
return new Promise<RegisterUserResult>((resolve,reject) => { return new Promise<RegisterUserResult>((resolve, reject) => {
db.doc(`userInfo/${userId}`).set( db.doc(`userInfo/${userId}`).set(
{ {
id: userId, id: userId,
@@ -225,10 +228,10 @@ export class AuthorizeService implements IAuthorizeService {
email email
} }
) )
.then(() => { .then(() => {
resolve(new RegisterUserResult(userId)) resolve(new RegisterUserResult(userId))
}) })
.catch((error: any) => reject(new SocialError(error.name, 'firestore/storeUserInformation : ' + error.message))) .catch((error: any) => reject(new SocialError(error.name, 'firestore/storeUserInformation : ' + error.message)))
}) })
} }
@@ -246,22 +249,22 @@ export class AuthorizeService implements IAuthorizeService {
providerId: string, providerId: string,
accessToken: string accessToken: string
) => { ) => {
return new Promise<RegisterUserResult>((resolve,reject) => { return new Promise<RegisterUserResult>((resolve, reject) => {
db.doc(`userProviderInfo/${userId}`) db.doc(`userProviderInfo/${userId}`)
.set( .set(
{ {
userId, userId,
email, email,
fullName, fullName,
avatar, avatar,
providerId, providerId,
accessToken accessToken
} }
) )
.then(() => { .then(() => {
resolve(new RegisterUserResult(userId)) resolve(new RegisterUserResult(userId))
}) })
.catch((error: any) => reject(new SocialError(error.name, error.message))) .catch((error: any) => reject(new SocialError(error.name, error.message)))
}) })
} }
} }

755
yarn.lock

File diff suppressed because it is too large Load Diff