angular - Angular Firebase 身份验证服务不起作用
问题描述
我正在尝试在 Angular 中创建身份验证服务,以提供连接到 Google Firebase 的登录表单。问题是,一旦我将服务包含在我的 Logincomponent 的构造函数中,我什至无法再到达 /login 路由。
我在控制台内没有收到任何错误。
有人知道问题出在哪里吗?
认证服务:
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { auth } from 'firebase/app';
import { AngularFireAuth } from '@angular/fire/auth';
import { AngularFirestore, AngularFirestoreDocument } from '@angular/fire/firestore';
import { Observable, of } from 'rxjs';
import { switchMap } from 'rxjs/operators';
import { User } from './user.model'
@Injectable({
providedIn: 'root'
})
export class TestService {
user$: Observable<User>;
constructor(private afAuth: AngularFireAuth, private afs: AngularFirestore, private router: Router) {
this.user$ = this.afAuth.authState.pipe(
switchMap(user => {
if (user) {
return this.afs.doc<User>(`users/${user.uid}`).valueChanges();
} else {
return of(null);
}
})
)
}
async googleSignin() {
const provider = new auth.GoogleAuthProvider();
const credential = await this.afAuth.signInWithPopup(provider);
return this.updateUserData(credential.user);
}
async signOut() {
await this.afAuth.signOut()
return this.router.navigate(['/'])
}
private updateUserData({ uid, email, displayName }: User) {
const userRef: AngularFirestoreDocument<User> = this.afs.doc(`users/${uid}`);
const data = {
uid,
email,
displayName
}
return userRef.set(data, { merge: true })
}
}
登录组件.ts
import { Component, OnInit } from '@angular/core';
import { Inject } from '@angular/core';
import { AuthService } from '../../services/auth.service';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { Observable } from 'rxjs';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.scss']
})
export class LoginComponent implements OnInit {
signupForm: FormGroup;
constructor(public fb: FormBuilder, public auth: AuthService) { }
ngOnInit(): void {
this.signupForm = this.fb.group({
'email': ['', [
Validators.required,
Validators.email
]],
'password': ['', [
Validators.pattern('/^([a-zA-Z0-9@$*#]{8,})$/'),
Validators.minLength(8),
]]
});
}
get email() { return this.signupForm.get('email') }
get password() { return this.signupForm.get('password') }
signup() {
// return this.auth.emailSignUp(this.email.value, this.password.value)
}
}
解决方案
该服务名为TestService
not AuthService
。
我会说你可能从其他地方导入了一些 AuthService 你有编译问题吗?
推荐阅读
- sql-server - 使用 .NET EF CORE,我可以将整个数据库复制到不同的服务器吗?
- java - Spring 瞬态注释适用于保存,但不适用于选择
- ios - 如何将搜索栏集中在 barbutton 点击上?
- javascript - 具有动态属性的假对象
- android - 如何在没有 onPostCreate() 的情况下实现 onSavedInstanceState()?
- javascript - 我想知道是否可以在没有 if 语句的情况下比较两个数组项
- c++ - 无法用crfsuite的C++ API编译一个非常简单的Tagger示例
- spring-boot - Spring Boot + Cucumber 在主范围内。我可以自动装配步骤定义吗?
- typescript - IDEA 和 TypeScript 导入
- javascript - 为什么我不能将数组连接到过滤器的结果?