尝试在Electron桌面应用程序中使用oauth流(使用spotify API)



我在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。

最新更新