使用Angular JS删除Facebook OAuth哈希

Som*_*ens 15 javascript angularjs

Facebook喜欢添加#_=_到我们提供的OAuth回调URL的末尾.虽然我们没有使用基于散列的导航,但它看起来很烦人,我想摆脱它.

location.hash = '';导致无限循环$watch(这也会发生$window.location.hash = '';).Angular的$location.hash('');改变方式没什么. $location.path('');让我们成为那里的一部分,导致/#/被附加到我们的网址.

我也玩过$locationProvider.html5Mode,只收到错误.(Error: [$injector:unpr] Unknown provider: $locationProviderProvider <- $locationProvider )虽然这可能是我自己的错.

如何在没有错误的情况下删除OAuth哈希?

小智 0

我假设您正在谈论https://www.facebook.com/dialog/oauth?client_id=...&redirect_uri= ... OAuth 调用。在我的代码中,我为它们提供了一个 URI 编码的重定向 URI,其中已经包含一个哈希值,例如 myserver.com/myapp/#/login/facebook,因此它们的重定向将在我的应用程序的 AngularJS $routeProvider 中处理。奇怪的是,Facebook 在哈希后的路径上附加了一个“&”,所以我的 $routeProvider 配置看起来像

myApp.config(['$routeProvider', function($routeProvider) {
  $routeProvider.
  when('/login/facebook', {
    templateUrl: 'dialogs/login/facebook.html',
    controller: 'LoginFacebookCtrl'
  }).
  when('/login/facebook&', { // Facebook seems to attach an & at the end
    templateUrl: 'dialogs/login/facebook.html',
    controller: 'LoginFacebookCtrl'
  })
  ...
}]);
Run Code Online (Sandbox Code Playgroud)

对我有用。