52857
こちらのチュートリアルを見ながらRailsとAngularの基本的なユーザー認証の方法を学習していたのですが`CanActivate`の動作でわからない点が出てきました。  
<https://hackernoon.com/angular-2-and-ruby-on-rails-user-authentication-
part-4-49d550c5869a>

このチュートリアルでは以下のように`CanActivate`を使い、権限のないユーザーが`/profile`にアクセスした時に`/`にビュー遷移するのですが、

```

      canActivate() {
        if (this.tokenService.userSignedIn()) {
          return true;
        } else {
          this.router.navigate(['/']);
          return false;
        }
      }
    
```

ドキュメントによると`canActivate`が`UrlTree`を返せば、現在のビュー遷移がキャンセルされ、返された`UrlTree`を元に新しくビュー遷移が行われるはずなので以下のように書き換えてみました。  
<https://angular.io/api/router/CanActivate>

```

      canActivate() {
        if (this.tokenService.userSignedIn()) {
          return true;
        }
        return this.router.createUrlTree(['/']);
      }
    
```

ですが、`Profile`コンポーネントは表示されなかったものの、ルートビューなら表示されるはずのWellcomeテキストも表示されずナビゲーションバーだけの表示になってしまいました。

なぜルートビューの`UrlTree`を渡してもビュー遷移しなかったのでしょうか？  
Angularのバージョンは`7.2.5`を使っています。
CC BY-SA 4.0
2019-02-18T01:25:56.817
52840
2019-02-19T01:10:15.033
3271
question
angular
CanActivateでUrlTreeを返しても正常にビューが遷移されない。
確かに @angular/router のバージョン7.2.5であれば CanActivateで UrlTreeを返せば遷移するはずです。`ng
version` コマンドでインストールされているRouterのバージョンを確認してみてもらいたいです。

また、Routerのデバッグであれば、 `RouterModule.forRoot()` の第二引数で渡せるオプションに、 `enableTracing`
というものがあります。どのようにRouterやGuardが動作するかのログがconsoleに流れますので、そちらも参考にしてみると解決が早まるかもしれません。
CC BY-SA 4.0
2019-02-19T01:10:15.033
52857
2019-02-19T01:10:15.033
4635
52840
answer