我是Angular的新手,正在使用.Net Core在Angular 6中进行培训。 我在本周早些时候进行了这项工作,但不确定在哪里弄坏它。 我编写了一个可以运行的身份验证服务,它会调用控制器并返回用户,但是在调用该服务的组件中,我无法获得订阅来调用router.navigate。 我只是不完全了解如何使用Observable,或者在这里甚至不需要它。直到我添加localStorage并编写Cookie为止,它的工作情况都很好。
我尝试删除添加的新内容,但没有任何变化。该组件将不会处理导航结果。在Subscribe上,我得到了constructor(private userService:UserService,
private afAuth: AngularFireAuth,
private route:ActivatedRoute) {
this.user$ = afAuth.authState;
}
的结果,但是得到了typescript错误结果是type。所以我删除了它。
我的登录组件,下一个块是进行http.post调用的我的Auth.Service。
.subscribe(_result => this.router.navigate(['/admin/dashboard'])
答案 0 :(得分:1)
您没有处理auth服务中的else块,为什么我们需要pipe(first())?
onSubmit() {
console.log('Calling Authentication Service');
this.authService.Authenticate(this.model)
.subscribe((valid) => this._router.navigate(['/admin/dashboard']),
_error => {
console.log('Authentication process failed')
this.model.Error = 'Authentication Failed';
this.authFailure = true;
}
);
Authenticate(signIn: SignIn): Observable < boolean > {
let authenticateUrl = this.configuration.Server + 'api/auth/Authenticate';
const toSignIn = JSON.stringify(signIn);
return this.http.post < SignIn > (authenticateUrl, toSignIn, {
headers: this.headers
})
.pipe(
map(result => {
if (result && result.Token) {
console.log('AuthService, We have a valid response and token');
// Store user details and the jwt token
localStorage.setItem('accessToken', result.Token);
localStorage.setItem('userName', result.Username);
localStorage.setItem('name', result.Firstname + ' ' + result.Lastname);
this.authCookie.writeAuthCookies(result);
// For Debuging purposes
console.log('Authenticate Complete, promise Observable');
return true;
}else{
return false;
}
}),
catchError((err, caught) => {
return Observable.throw(new Error('App Error'));
})
);
}
答案 1 :(得分:-1)
我的坏人,它正常工作,但是导航是如此之快,我没有看到它。因此,它导航到仪表板,但是我的authGuard拒绝了该请求并重定向回登录,因此看起来什么都没有发生。
[已解决],我对“可观察”的工作原理有了更清晰的了解。