如何将我的 Spotify access_token 存储在本地以便我可以在不同的 Javascript 文件中访问它
How do I store my Spotify access_token local so I can access it in different Javascript files
嗨,我对使用 Javascript 进行编码还比较陌生,我正在尝试弄清楚如何在不同的 javascript 文件中访问 Spotify API 的 access_token。我 运行 两台本地服务器,一台 React,一台在 node.js 中。 React 服务器有一个按钮,允许用户在节点服务器中使用 Spotify 的 Oauth 登录,然后访问令牌和刷新令牌成功重定向回 React 服务器。 OAuth 工作得很好,因为我从他们提供的 Spotify API 指南中得到它。我设置这些文件的方式是,在我的主项目中,我有一个较旧的 auther-server,其中包括 Spotify OAuth 文件和一个客户端文件夹,这是我创建 React 应用程序的地方。这是我获得 OAuth 文件的地方(https://github.com/spotify/web-api-auth-examples)。这些文件中唯一发生变化的是 authorization_code 文件夹中的 app.js,我在其中输入了我的客户端和密码 ID,并使用了正确的重定向 url,我也这样做了:
res.redirect('http://localhost:3000/#' +
querystring.stringify({
access_token: access_token,
refresh_token: refresh_token
}));
} else {
res.redirect('/#' +
querystring.stringify({
error: 'invalid_token'
}));
我在其中进行重定向 link 使用令牌转到 http://localhost:3000/#,这是我的 React 应用程序。从那里我转到我的 React 目录,在 App.js 文件中,我遵循我在 youtube 上找到的指南,它帮助我了解用户正在播放的内容 (https://www.youtube.com/watch?v=prayNyuN3w0&t=1496s)。这是代码:
import React, { Component, useEffect } from "react";
import "./App.css";
import Spotify from 'spotify-web-api-js';
const spotifyWebApi = new Spotify();
class App extends Component {
constructor() {
super();
const params = this.getHashParams();
this.state ={
loggedIn: params.access_token ? true : false,
nowPlaying: {
name: 'Not Checked',
image: '',
}
}
if (params.access_token){
spotifyWebApi.setAccessToken(params.access_token)
}
}
getHashParams() {
var hashParams = {};
var e,
r = /([^&;=]+)=?([^&;]*)/g,
q = window.location.hash.substring(1);
while ((e = r.exec(q))) {
hashParams[e[1]] = decodeURIComponent(e[2]);
}
return hashParams;
}
getNowPlaying(){
spotifyWebApi.getMyCurrentPlaybackState()
.then((response) => {
this.setState({
nowPlaying:{
name: response.item.name,
image: response.item.album.images[0].url
}
})
})
}
render() {
return (
<div className="App">
<a href="http://localhost:8888">
<button>Login With Spotify</button>
</a>
<div>Now Playing: {this.state.nowPlaying.name}</div>
<div>
<img src={ this.state.nowPlaying.image } style={{width: 100}}/>
</div>
<button onClick={() => this.getNowPlaying()}>Check Now Playing</button>
<br></br>
</div>
);
}
}
export default App;
这一切都很好,但我现在正在尝试访问用户的数据(播放列表),以便稍后可以使用朴素贝叶斯和 KNN classifers 提出新的建议,但我会在解决这个问题后解决这个问题先咬。我查找了存储令牌的方法并找到 localStorage.set(token....) 将其存储在浏览器中,但我没有成功,因为我对在我的代码中设置它的位置感到困惑。我认为我使用 spotify web api js 库 https://github.com/jmperez/spotify-web-api-js 也值得一提。我猜想我会在 class 应用程序中使用类似的功能,例如 getNowPlaying() 来获取播放列表,但我总是迷路。这是我在这里的第一个问题,我可能没有在这里很好地解释我的问题,但我希望我能在这里找到一些帮助。谢谢,如果我需要提供更多信息,请告诉我。 :)
您可能处于领先地位,可以用 localStorage.set
做您想做的事。
它是全球可访问的。您可以从检索令牌的任何地方到 localStorage.set
来存储它。然后,您就可以在应用中的任何位置执行 localStorage.get
。
使用 localStorage 是个好主意,因为它可以帮助您在页面刷新之间保留此令牌。如果有人可以访问您使用的机器,出于安全考虑,您可能希望在某个时候将其从 localStorage 中删除。
如果您不想使用 localStorage,另一种方法是将其设置在一个单独的 JavaScript 文件中,您可以将其导入任何您可能想使用它的地方。
如果你想让数据集中更进一步,你甚至可以寻找存储原则。
嗨,我对使用 Javascript 进行编码还比较陌生,我正在尝试弄清楚如何在不同的 javascript 文件中访问 Spotify API 的 access_token。我 运行 两台本地服务器,一台 React,一台在 node.js 中。 React 服务器有一个按钮,允许用户在节点服务器中使用 Spotify 的 Oauth 登录,然后访问令牌和刷新令牌成功重定向回 React 服务器。 OAuth 工作得很好,因为我从他们提供的 Spotify API 指南中得到它。我设置这些文件的方式是,在我的主项目中,我有一个较旧的 auther-server,其中包括 Spotify OAuth 文件和一个客户端文件夹,这是我创建 React 应用程序的地方。这是我获得 OAuth 文件的地方(https://github.com/spotify/web-api-auth-examples)。这些文件中唯一发生变化的是 authorization_code 文件夹中的 app.js,我在其中输入了我的客户端和密码 ID,并使用了正确的重定向 url,我也这样做了:
res.redirect('http://localhost:3000/#' +
querystring.stringify({
access_token: access_token,
refresh_token: refresh_token
}));
} else {
res.redirect('/#' +
querystring.stringify({
error: 'invalid_token'
}));
我在其中进行重定向 link 使用令牌转到 http://localhost:3000/#,这是我的 React 应用程序。从那里我转到我的 React 目录,在 App.js 文件中,我遵循我在 youtube 上找到的指南,它帮助我了解用户正在播放的内容 (https://www.youtube.com/watch?v=prayNyuN3w0&t=1496s)。这是代码:
import React, { Component, useEffect } from "react";
import "./App.css";
import Spotify from 'spotify-web-api-js';
const spotifyWebApi = new Spotify();
class App extends Component {
constructor() {
super();
const params = this.getHashParams();
this.state ={
loggedIn: params.access_token ? true : false,
nowPlaying: {
name: 'Not Checked',
image: '',
}
}
if (params.access_token){
spotifyWebApi.setAccessToken(params.access_token)
}
}
getHashParams() {
var hashParams = {};
var e,
r = /([^&;=]+)=?([^&;]*)/g,
q = window.location.hash.substring(1);
while ((e = r.exec(q))) {
hashParams[e[1]] = decodeURIComponent(e[2]);
}
return hashParams;
}
getNowPlaying(){
spotifyWebApi.getMyCurrentPlaybackState()
.then((response) => {
this.setState({
nowPlaying:{
name: response.item.name,
image: response.item.album.images[0].url
}
})
})
}
render() {
return (
<div className="App">
<a href="http://localhost:8888">
<button>Login With Spotify</button>
</a>
<div>Now Playing: {this.state.nowPlaying.name}</div>
<div>
<img src={ this.state.nowPlaying.image } style={{width: 100}}/>
</div>
<button onClick={() => this.getNowPlaying()}>Check Now Playing</button>
<br></br>
</div>
);
}
}
export default App;
这一切都很好,但我现在正在尝试访问用户的数据(播放列表),以便稍后可以使用朴素贝叶斯和 KNN classifers 提出新的建议,但我会在解决这个问题后解决这个问题先咬。我查找了存储令牌的方法并找到 localStorage.set(token....) 将其存储在浏览器中,但我没有成功,因为我对在我的代码中设置它的位置感到困惑。我认为我使用 spotify web api js 库 https://github.com/jmperez/spotify-web-api-js 也值得一提。我猜想我会在 class 应用程序中使用类似的功能,例如 getNowPlaying() 来获取播放列表,但我总是迷路。这是我在这里的第一个问题,我可能没有在这里很好地解释我的问题,但我希望我能在这里找到一些帮助。谢谢,如果我需要提供更多信息,请告诉我。 :)
您可能处于领先地位,可以用 localStorage.set
做您想做的事。
它是全球可访问的。您可以从检索令牌的任何地方到 localStorage.set
来存储它。然后,您就可以在应用中的任何位置执行 localStorage.get
。
使用 localStorage 是个好主意,因为它可以帮助您在页面刷新之间保留此令牌。如果有人可以访问您使用的机器,出于安全考虑,您可能希望在某个时候将其从 localStorage 中删除。
如果您不想使用 localStorage,另一种方法是将其设置在一个单独的 JavaScript 文件中,您可以将其导入任何您可能想使用它的地方。
如果你想让数据集中更进一步,你甚至可以寻找存储原则。