我在Electron中有一个React应用程序,我正在尝试使用spotify-web-API-node库访问spotify API。然而,我不确定oauth流在Electron应用程序中究竟是如何工作的。。。首先,对于重定向URL,我使用了这个问题,并在我的文件中添加了一个registerFileProtocol
调用。然后,我添加了一个特定的ipcMain.on
处理程序,用于接收来自页面的spotify登录调用,我已经确认它可以与控制台日志一起使用。然而,当我真正调用authorizeURL
时,什么都没发生?
这是我的main.js:的一部分
app.whenReady().then(() => {
...
protocol.registerFileProtocol(
"oauthdesktop",
(request, callback) => {
console.log("oauthdesktop stuff: ", request, callback);
//parse authorization code from request
},
(error) => {
if (error) console.error("Failed to register protocol");
}
);
});
ipcMain.on("spotify-login", (e, arg) => {
const credentials = {
clientId: arg.spotifyClientId,
clientSecret: arg.spotifySecret,
redirectUri: "oauthdesktop://test",
};
const spotifyApi = new SpotifyWebApi(credentials);
console.log("spapi: ", spotifyApi);
const authorizeURL = spotifyApi.createAuthorizeURL(
["user-read-recently-played", "playlist-modify-private"],
"waffles"
);
console.log("spurl: ", authorizeURL);
axios.get(authorizeURL);
}
我预计会出现典型的spotify登录页面弹出窗口,但这并没有发生。我也希望(可能(registerFileProtocol
回调记录一些内容,但它没有。我在这里干什么?授权指南特别提到在authurl上执行GET请求,这就是我在这里所做的。。。
在桌面应用程序中,建议打开系统浏览器,Spotify登录页面将在那里呈现,作为创建承诺的一部分。开启器库可用于调用浏览器。
当用户完成登录时,该技术是通过私有URI方案/文件协议接收响应,然后解决承诺,获得授权码,然后将其交换为令牌。不过这很棘手。
矿山资源
我有一些关于这方面的博客文章,你可以从中借鉴一些想法,还有一些你可以在电脑上运行的代码示例:
- 初始桌面示例
- 最终桌面示例
第二个是React应用程序,使用私有URI方案,因此与您的方案非常相似。我使用的是AppAuthJS库,而不是Spotify。