javascript - AngularJS oauth 端点在 url 中带有哈希(SpotifyAPI)

标签 javascript angularjs oauth oauth-2.0 spotify

我想接收来自 Spotify 的 oauth 回调,但我的 URL 中的 # 有问题。

路由.js

 app.config(['$routeProvider',
  function ($routeProvider) {
    $routeProvider.
      ...
      when('/callback', {
        templateUrl: 'views/callback.html',
        controller: 'CallbackCtrl'
      })
      ...
  }]);

所以要访问该路由,URL 是 e。 G。 http://test.com/#/callback

对于 spotify 端点,redirect_uri 必须进行 url 编码:

https://accounts.spotify.com/authorize/?client_id=...&response_type=code&redirect_uri=http%3A%2F%2Ftest.com%2F%23%2Fcallback&scope=user-read-private% 20user-read-email&state=profile%2Factivity

来自 spotify 的重定向:

http://test.com/%23/callback?code=..&state=profile%2Factivity

这会导致 404

我知道有一些解决方法,例如使用 / 路由或启用 html5mode 来摆脱 #,但我希望有一个真正的解决方案。

最佳答案

嗯,你的情况一点也不尴尬。

由于您无法控制 spotify 在 OAuth 工作后的重定向方式,因此您有两个选择:

1) 创建一个 URL 路径,例如 http://test.com/redirect_uri/?code=....这将自动将用户重定向到登录状态下的 webapp。

这种方法不是一个好习惯,除非你真的很清楚自己在做什么。这里的主要问题是安全性。除非你在重定向页面中添加非常好的机制。

2) 更简单,实际上各方面都更好:

$locationProvider.html5Mode(true); 对此的一个小介绍:

为什么这会删除 # ?因为当 HTML5 模式开启时,它将使用历史记录来引用您应用中的 native 路径。

但是坚持这不是你唯一要做的事情: 您必须重定向所有请求才能正常浏览主页 index.html .

我以前用 .htaccess 来做到这一点,但是从 AngularJS 1.3 开始,我知道还有另一种方法可以添加 meta <base href=/base/path/of/app/directory"> 的标签.通常<base href="/">

但我仍然更喜欢 .htacces rewriterule 或 w/e 您正在使用的网络服务器。

关于javascript - AngularJS oauth 端点在 url 中带有哈希(SpotifyAPI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26564540/

相关文章:

javascript - Angular,观察 $scope 变化

javascript - Angular.js - 在其他任何事情之前运行服务功能?

ios - 如何在没有 safari 的情况下完全在应用程序内部打开 url 并获取访问 token ?

没有 client_secret 的 OAuth2 授权代码 PKCE (wso2 5.3.0 IAM)

json - 将 oAuth token 与 Azure MobileServiceClient.login() 结合使用

Javascript .accordion() 不工作

javascript - 使用向上和向下箭头键滚动(突出显示)HTML 表格中的行

javascript - React-big-calendar 月份按钮点击不显示所有数据(不同浏览器有所不同)

JavaScript - 匹配不在 <a> 或属性内的链接

mysql - 一个mysql单元格和Json数据中的多个条目