使用Firebase身份验证和角度路由器进行路由

时间:2019-02-06 14:40:11

标签: javascript angular firebase ionic-framework ionic4

我正在使用ionic4构建一个离子应用程序。因此,我将Firestore用作数据库。另外,我想使用firebase-authentication登录并注册到我的应用程序。问题如下:我的网站上有多个页面。有些页面供公众访问,而有些页面供私人访问。通过我实现的路由器防护,只有在我登录后才能看到私有路由器。现在的问题是,只有我未登录时才可以访问公共站点(例如登录名或注册名)

在我的路由这样工作的那一刻,我有一个“ /”目录,所有私有内容都在“ / private /”目录中。该目录具有自己的路由器防护,只有登录后才能访问。 我希望所有内容都位于“ /”目录中。 对于这个问题,我想实现,路由器将用户重定向到错误页面,如果该用户尝试访问没有经过登录的私人页面,或者尝试访问公共页面(如果已登录,则该公共页面将不可访问)。

路由器:

const routes: Routes = [
  { path: '', redirectTo: 'home', pathMatch: 'full' },
  { path: 'home', loadChildren: './pages/home/home.module#HomePageModule' },
  { path: 'login', loadChildren: 
  './pages/public/login/login.module#LoginPageModule' },
  { path: 'register', loadChildren: 
  './pages/public/register/register.module#RegisterPageModule' },
  {
  path: 'private',
  canActivate: [AuthGuardService],
  loadChildren: './pages/private/private-routing.module#PrivateRoutingModule'
  },
  // TODO: Create an awesome 404 Page :D
  { path: '**', redirectTo: 'home' },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
  })
  export class AppRoutingModule {}

RouterGuard:

@Injectable({
providedIn: 'root'
})
export class AuthGuardService implements CanActivate {

  constructor(public auth: AuthenticationService, private router: Router) { 
  }

  canActivate(): boolean {
  const isAuthenticated = this.auth.isAuthenticated();
  if (!isAuthenticated) {
    this.router.navigate(['/login']);
  }
  return isAuthenticated;
  }
}

您可以在GitHub上找到我的代码:Code

我希望我的问题已经解决,并且对每个答案都感到高兴:)

编辑:我没有结果,而且真的被卡住了!欢迎任何帮助!

1 个答案:

答案 0 :(得分:1)

没有反应,所以我自己弄清楚了,变成这样了:https://www.positronx.io/full-angular-7-firebase-authentication-system/

编辑:我决定制作多个AuthenticationGuard。这些保护措施之一用于私有页面,另一种仅用于公共页面。我还将登录用户保存到localStorage中,以进行同步呼叫。因此,我使用它的属性创建了一个名为user的接口。其余部分相同。我使用了“像问题中一样”的角度路由器,并添加了canActivate。

PS:给这个家伙的建议,他在我根据请求xD编辑解决方案不到一分钟后就根据自己的评论删除了我的解决方案