【发布时间】:2016-10-04 20:52:23
【问题描述】:
尝试处理 OAuth 登录场景,如果用户登陆查询字符串中带有 authorization_code 的页面,我们会处理令牌并继续或如果他们登陆页面没有,我们检查其现有令牌的本地存储,确保它仍然有效,然后根据其有效性重定向到登录或继续。
问题在于,我们在检查 authorization_code 查询字符串参数是否存在时,订阅会触发两次。第一次为空,第二次在字典中有正确的值。
app.component.ts
export class App implements OnInit {
constructor(private _router: ActivatedRoute) {
}
public ngOnInit(): void {
console.log('INIT');
this._route.queryParams.subscribe(params => {
console.log(params);
});
}
}
Plunker(您需要将其弹出到新窗口并添加查询字符串?test=test)。
问题
- 我做错了什么让它触发两次?
- 我不能只忽略带有条件的空对象,因为这是我们需要验证现有身份验证令牌的场景 - 是否有另一种不完全破解的方法?
【问题讨论】:
-
一个有趣的转折......当没有提供查询字符串时,订阅只会触发一次。
-
我以https://embed.plnkr.co/XgCauzZdTSqqokCdFWCi/?test=test 进行了测试,没有任何意外发生!?
-
@A_Singh 你测试了错误的 url,所以你只得到第一个空值
-
我在使用location.go()时遇到了这个问题,然后在用户使用浏览器导航返回时尝试获取查询参数。
-
将您的订阅代码放在 ngAfterViewInit 方法上,stackoverflow.com/questions/39861547/…
标签: angular rxjs angular2-routing