角度6,订阅并返回Observable <boolean>

时间:2018-09-01 18:13:32

标签: angular observable

我是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'])

2 个答案:

答案 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拒绝了该请求并重定向回登录,因此看起来什么都没有发生。

[已解决],我对“可观察”的工作原理有了更清晰的了解。