花了很多时间来解决我的问题,但未能解决。另外,我遇到过SO的相关主题,但仍然找不到解决此问题的解决方案。
问题
成功注册后,我收到了 true
的电子邮件验证标志。但是当我尝试使用相同的凭据重新登录时,路由到“主页”页面并没有发生。我不知道该怎么做post方法。
到目前为止有什么!!
firebase-service.ts
export class FireBaseAuthenticationService {
userData: any;
constructor(
public afs: AngularFirestore,
public afAuth: AngularFireAuth,
public router: Router,
public ngZone: NgZone
) {
this.afAuth.authState.subscribe(user => {
if (user) {
this.userData = user;
localStorage.setItem('customerInfo', JSON.stringify(this.userData));
JSON.parse(localStorage.getItem('customerInfo'));
} else {
localStorage.setItem('customerInfo', null);
JSON.parse(localStorage.getItem('customerInfo'));
}
});
}
userLogin(email, password) {
return this.afAuth.auth.signInWithEmailAndPassword(email, password)
.then((result) => {
this.ngZone.run(() => {
this.router.navigate(['home']);
});
this.setCustomerInfo(result.user);
}).catch((error) => {
const errorCode = error.code;
const errorMessage = error.message;
console.log('err', errorMessage);
})
}
}
user-login.html
<fieldset class="clearfix">
<p><span class="fa fa-user"></span><input type="text" Placeholder="Username" required #userName ></p>
<p><span class="fa fa-lock"></span><input type="password" Placeholder="Password" required #userPassword></p>
<div id="submit-btn">
<span class="spn-submit"><input type="submit" value="Sign In" (click)="authenticate.userLogin(userName.value, userPassword.value)"></span>
</div>
</fieldset>
预期:
但现在,登录页面的加载时间为几秒钟,并且保持不变。
pls,让我知道需要更多信息。
请不要将其标记为重复项,我已经挖掘了SO以找到解决方案。但我失败了
感谢所有人
答案 0 :(得分:1)
您正在通过服务进行重定向,因此请使用do
运算符或返回可观察到的内容并在组件中进行重定向。
使用操作符
userLogin(email, password) {
return this.afAuth.auth.signInWithEmailAndPassword(email, password)
.do((result) => {
this.ngZone.run(() => {
this.router.navigate(['home']);
});
this.setCustomerInfo(result.user);
}).catch((error) => {
const errorCode = error.code;
const errorMessage = error.message;
console.log('err', errorMessage);
})
}
我在.do()内进行了导航,因为成功登录将始终导航到当前设置的重定向URL。
如果始终不这样做,那么router.navigate
将是错误的。但是,考虑到总是这样做,那么这种方法可以确保一致性。
在组件中创建方法并从组件中重定向。
// service code
userLogin(email, password) {
return this.afAuth.auth.signInWithEmailAndPassword(email, password);
}
}
// component code
userLogin(email, password) {
this.authService.userLogin(email, password).then((result) => {
this.ngZone.run(() => {
this.router.navigate(['home']);
});
this.setCustomerInfo(result.user);
}).catch((error) => {
const errorCode = error.code;
const errorMessage = error.message;
console.log('err', errorMessage);
})
}