我使用oauth身份验证登录用户。用户登录后,从URL获取。像这样的网址:http://xxx/callback#access_token=xxx。然后重定向到其他页面。我使用 this.router.navigateByUrl 进行重定向,删除了哈希标记,但是当我点击其他链接时,哈希片段将再次显示。如何永久删除散列令牌片段?
示例:
使用 // xxx / callback#access_token = xxx
后登录重定向到 // xxx / home
然后点击linkA,网址为 // xxx / linkA#access_token = xxx
预期网址 // xxx / linkA
答案 0 :(得分:2)
我不知道你如何重定向,但我认为它是由你使用的方法引起的。
重置片段的一种方法是
<a routerLink="path" fragment="">
(尚未自我测试)。
来自代码
let tree = this.router.navigate(['path'], {relativeTo: this.route, queryParams: ''});
另见https://angular.io/docs/ts/latest/api/router/index/Router-class.html#!#createUrlTree-anchor
答案 1 :(得分:2)
您应该将useHash
等于false
添加到app.module的导入
@NgModule({
bootstrap: [ App ],
declarations: [App],
imports: [
....
RouterModule.forRoot(ROUTES, { useHash: false })
],
providers: []
})
将其设为false会阻止其使用HashLocationStrategy
RouterModule.forRoot function
答案 2 :(得分:2)
我有同样的问题,我的解决方案是在检索到access_token之后,你可以设置: window.location.hash =''
它对我有用
答案 3 :(得分:1)
看起来这已在Angular 2最终版本中修复(现在用2.1.0测试)。
以下适用于我:
router.navigate([]);
重定向到&#34;索引&#34;没有哈希的页面,它不会在后续导航中重新出现。
答案 4 :(得分:0)
如果您在他们的文档中使用auth0,他们会这样做:
this.auth0.parseHash({ _idTokenVerification: false }, (err, authResult) => {
if (authResult && authResult.accessToken && authResult.idToken) {
window.location.hash = "";
}
});
取而代之的是:
this.auth0.parseHash({ _idTokenVerification: false }, (err, authResult) => {
if (authResult && authResult.accessToken && authResult.idToken) {
this.router.navigate["/home"]
}
});
这将删除整个哈希