我正在为我的Angular2网络应用程序设置Facebook注册 . 一旦应用程序通过Facebook接受(在重定向到Facebook授权页面后),它将重定向到我的webapp,其令牌和代码为url params:
http://localhost:55976/?#access_token=MY_ACCESS_TOKEN&code=MY_CODE
但是一旦页面加载,params就被删除了 . 网址变为:
http://localhost:55976/
如何在删除参数(access_token和代码)之前将其提取出来?我的路由配置包含:
{ path: 'login', component: LoginComponent },
{ path: 'login/:access_token/:code', component: LoginComponent },
EDIT:
以下是我在login.component中重定向到facebook的方式:html:
<a class="btn btn-social btn-facebook socialaccount_provider facebook" title="Facebook" href="#" (click)="login_facebook()">
<span class="fa fa-facebook"></span> <span style="padding-left:25px">Sign in with Facebook</span>
</a>
打字稿:
login_facebook() {
let url = 'https://www.facebook.com/dialog/oauth?'+
'client_id=my_client_id' +
'&redirect_uri=' + encodeURIComponent('http://localhost:55976/#/login/') +
'&response_type=code%20token';
console.log(url);
window.location.href = url;
}
facebook api重定向到http://localhost:55976/#/login/,这是我尝试获取access_token和代码参数的地方 .
EDIT 2:
如果我删除重定向网址中的锐利,facebook会将我重定向到好的网址,但没有锐利,有角度无法解析网址 .
在删除'#'之前:
redirect_uri: http://localhost:55976/#/login/
facebook return: http://localhost:55976/?#access_token=MY_ACCESS_TOKEN&code=MY_CODE
删除'#'后:
redirect_uri: http://localhost:55976/login/
facebook return: http://localhost:55976/login/?#access_token=MY_ACCESS_TOKEN&code=MY_CODE
这意味着问题来自尖锐的问题 . 但没有尖锐,角度返回HTTP错误404.0 - 未找到 .
7 回答
您正在寻找
ActivatedRoute
的query parameters .要接收它们,您可以将它们放入组件的
OnInit
函数中,如下所示:我在上面的链接中有更多的例子 . 您可能遇到角度问题,因为路由器还识别了以#开头的片段...如果angular确实将其识别为片段,那么您可以从
ActivatedRoute
订阅可观察的片段并按此方式执行 .我被重定向了 . 如果你是,可以考虑使用
preserveQueryParams
导航选项,类似这样 .这是我最后的工作代码:
进口:
构造函数:
使用Javascript:
这适合我! :)
在this帖子中查看我的答案 .
[更新]似乎有些主持人删除了我的答案,说这是重复的答案 . 但我不同意,因为我根据每个问题发布了相关的代码片段 . 在此答案未被删除之前,我再次在此处发布部分答案 . 如果您同意,请投票取消删除我的答案 .
使用
window.location.hash
访问从#开始的所有参数 . 或者您可以使用window.location.href
访问完整的URL . 要获得令牌,您可以使用window.location.hash.match(/#access_token=([^&]+)/)[1]
.注意:如果您使用的是TypeScript,则需要在组件中导入窗口 .
你试过这个吗?