我有一个canActivate Guard,它检查jwt令牌的URL并将其保存为cookie(然后将检查cookie)。如果没有令牌,那么页面将被重定向到另一个允许用户登录并创建jwt的应用程序。
当我向后导航时,我得到一个像:
这样的网址 http://localhost:3000/?jwt=...
AppModule
执行以下操作:
RouterModule.forRoot([{path: "**", redirectTo: "/import", pathMatch: "full"}], {useHash: true})
然后在ImportModule
:
RouterModule.forChild([
{ path: "import", component: ImportComponent, canActivate: [ImportGuard] }
])
问题是我可以看到网址从localhost:3000/?jwt=...
更改为localhost:3000/#/import
并且参数丢失了,所以当我检查它时它不存在。
我是Angular2的新手,几乎肯定做错了什么,但我很难找到如何从外部网址获取参数的任何示例。
我无法更改外部服务以返回网址/#/import?jwt=...
而且我觉得我不需要因为当前的实施已与ReactJS一起使用,所以我觉得喜欢它应该可以使用Angular。
有什么建议值得赞赏吗?如果您需要更多信息,请告诉我。
由于
答案 0 :(得分:1)
为什么您无法在导入下使用子路由。例如
RouterModule.forChild([
{ path: "import", component: ImportComponent, canActivate:[ImportGuard],
Children:[
{ path: "/:jwt", component: ImportComponent, canActivate: [ImportGuard]}] }
])
答案 1 :(得分:1)
我偶然发现了同样的问题,如何保持url params并重定向路由配置 要绕过此不受支持的操作,这可能有所帮助:
export const routes: Routes = [
{
path: '',
component: RedirectComponent,
pathMatch: 'full'
}
}, [... your other routes config]
];
和RedirectComponent在init:
this.router.navigate(['/import'], {relativeTo: this.route , preserveQueryParams : true});
答案 2 :(得分:0)
我通过以下方式解决了这个问题
RouterModule.forRoot([{path: "**", component: AppComponent, pathMatch: "full"}], {useHash: true})
然后在AppComponent中我使用document.URL
来获取URL并直接从字符串中获取参数。我不喜欢这个解决方案,因为它有点hacky并且更倾向于使用路由/路由器。