如何使用Angular2访问请求标头?

时间:2016-04-16 17:17:06

标签: go typescript angular jwt

在我的golang后端成功oauth2请求facebook之后我将用户重定向到我的应用程序的仪表板,如下所示:

w.Header().Set("Authorization", fmt.Sprintf("Bearer %s", tokenString))
http.Redirect(w, r, "http://" + r.Host + "/dashboard?jwt=" + tokenString, http.StatusFound)

然后在仪表板初始化中,我做了如下所述:

params:RouteParams;


constructor(private _router:Router, private _jwt:JWTService, private _params:RouteParams, private location:Location) {
    this.params = _params;


}


consol() {
    var redirect_url = encodeURIComponent("http://localhost:9000/api/facebook/");
    var url = "https://www.facebook.com/dialog/oauth?client_id=xxxx&redirect_uri="+ redirect_url + "&response_type=code&scope=email+user_location+user_about_me"
    window.location.href=url;
}

ngOnInit() {
    this.token = '';
    console.log(this.params);
    if (this.params.params['jwt'] != null) {
        console.log(this.params);
        localStorage.setItem('jwt', this.params.params['jwt']);
        this.location.replaceState('/dashboard')
    }
    this.Bouncer();
}

我想避免让我的网址变脏,甚至几秒钟都没有。我希望我可以检查请求标头,因为我也通过它发送jwt。

更新

原始请求是通过angular2-material按钮

完成的
 <div md-raised-button color="warn" (click)="consol()">Login to FACEBOOK</div>

1 个答案:

答案 0 :(得分:1)

首先我创建一个弹出窗口/标签。

    var url = "https://accounts.google.com/o/oauth2/auth?client_id="
                    + clientid + "&redirect_uri="
                    + redirect_url + "&response_type=code&scope="
                    + scope;
    window.open(url);

这是google并在返回的路上,在重定向网址上点击我的服务器。 它在此弹出窗口中提供下面的脚本标记。它实际上只是在创建此弹出窗口的窗口上运行一个命令,在本例中是我的SPA,我的应用程序令牌作为参数然后关闭它。

w.Write([]byte(`
                    <script>
                        var token="` + token + `";
                        function CloseMySelf() {
                            try {
                                window.opener.angularComponentRef.runThisFunctionFromOutside(token);
                            }
                            catch (err) {}
                            window.close();
                            return false;
                        }
                        CloseMySelf();
                    </script>

    `))

这是它调用的函数。此方法需要像question显示的那样公开。

runThisFunctionFromOutside(token) {
    localStorage.setItem('jwt', token);
    location.href = "../dashboard";
}