HashRouter 导致 Spotify 隐式授权流失败,因为回调 URL 无效

Posted

技术标签:

【中文标题】HashRouter 导致 Spotify 隐式授权流失败,因为回调 URL 无效【英文标题】:HashRouter causes Spotify Implicit Grant Flow to fail because callback URL is invalid 【发布时间】:2018-08-29 08:04:57 【问题描述】:

我有一个HashRouter,它使URL加#,导致在URL回调response_type查询参数后面加#。

如果你把#改成%23,会导致重定向URI无效。

如何结合使用 HashRouter 和 Spotify 隐式授权流程?

我把我的应用放到了github页面上:githubpage

【问题讨论】:

【参考方案1】:

解决此问题的快速解决方案是,假设您的重定向 URI 是 http://localhost:8000/#/callback,使用正则表达式向您的 HashRouter 添加路由:

<Route path="/:access_token(access_token=.*)" component=ComponentWhichParsesTheURLAndExtractTheToken />

这会将http://localhost:8000/#/access_token= 类型的任何 url 定向到所需的组件。所需的组件应该是您解析 url 以捕获令牌的组件。

如果您使用他们的implicit grant example 中的 Spotify 函数 getHashParams() 来捕获哈希参数,也请更改此行:

q = window.location.hash.substring(1);

q = window.location.hash.substring(2); 

为了从window.location.hash 路径中删除第一个字符/

对于这个问题可能有更好的解决方案(参见this answer for angular),尽管我认为这是一个适用于普通应用程序的快速破解方法。

【讨论】:

以上是关于HashRouter 导致 Spotify 隐式授权流失败,因为回调 URL 无效的主要内容,如果未能解决你的问题,请参考以下文章

Spotify - 使用隐式流获取和更改用户数据

带有 React 的 Spotify 隐式授权流程 - 用户登录

react-router-dom中的BrowserRouter和HashRouter

react-router-dom中的BrowserRouter和HashRouter

react-router-dom中的BrowserRouter和HashRouter

请求从 Spotify Web API 获取用户信息导致 401 错误