gpt4 book ai didi

oauth - Electron 和 ReactJS,使用 BrowserWindow 进行 GitHub oAuth 身份验证

转载 作者:行者123 更新时间:2023-12-04 23:45:11 24 4
gpt4 key购买 nike

我已经用 ReactJs 设置了 github 的 Electron。所以我得到了一个 BrowserWindow和一个 react 应用程序在那个窗口中很好地播放。我想要实现的是通过 GitHub 进行身份验证。所以当用户按下 Login with Github按钮,一个新的 BrowserWindow打开并转到 github 授权应用程序 url。我的问题与 有关回调以及我将如何获取从回调返回的代码。我已经用 Apache Cordova 和 InAppBrowser 完成了但它是不同的,因为我能够使用 localhost作为回调。

到目前为止,我对 Electron 所做的工作是打开新的 BrowserWindow但授权后我无法从回调中获取代码。

var authWindow = new BrowserWindow({ width: 800, height: 600, show: true, 'always-on-top': true });
var githubUrl = 'https://github.com/login/oauth/authorize?';
var authUrl = githubUrl + 'client_id=' + options.client_id + '&scope=' + options.scope;

authWindow.loadUrl(authUrl);
authWindow.setVisibleOnAllWorkspaces(true);
authWindow.setResizable(false);

authWindow.addListener('page-title-updated', function(stream) {
console.log("LOADED");
console.log(JSON.stringify(stream));
console.log(stream);

var url = (typeof stream.url !== 'undefined' ? stream.url : stream.originalEvent.url),
raw_code = /code=([^&]*)/.exec(stream.url) || null,
code = (raw_code && raw_code.length > 1) ? raw_code[1] : null,
error = /\?error=(.+)$/.exec(strean.url);

if (code || error) {
authWindow.close();
}

// If there is a code in the callback, proceed to get token from github
if (code) {
// requestToken(code);
} else if (error) {
alert("Oops! Couldn't log authenticate you with using Github.");
}
});

我在做什么 console.log(JSON.stringify(stream));我收到 {}所以这是必须做的事情 eventListener ?任何想法或更好的方法?

最佳答案

所以我缺少的是正确的 event .正确的做法是:

// Build the OAuth consent page URL
var authWindow = new BrowserWindow({ width: 800, height: 600, show: false, 'node-integration': false });
var githubUrl = 'https://github.com/login/oauth/authorize?';
var authUrl = githubUrl + 'client_id=' + options.client_id + '&scope=' + options.scopes;
authWindow.loadUrl(authUrl);
authWindow.show();

// Handle the response from GitHub
authWindow.webContents.on('did-get-redirect-request', function(event, oldUrl, newUrl) {

var raw_code = /code=([^&]*)/.exec(newUrl) || null,
code = (raw_code && raw_code.length > 1) ? raw_code[1] : null,
error = /\?error=(.+)$/.exec(newUrl);

if (code || error) {
// Close the browser if code found or error
authWindow.close();
}

// If there is a code in the callback, proceed to get token from github
if (code) {
requestGithubToken(options, code);
} else if (error) {
alert("Oops! Something went wrong and we couldn't log you in using Github. Please try again.");
}

});

// Reset the authWindow on close
authWindow.on('close', function() {
authWindow = null;
}, false);

我还写了一个教程来描述完整的实现,可以在 http://manos.im/blog/electron-oauth-with-github/ 找到。

关于oauth - Electron 和 ReactJS,使用 BrowserWindow 进行 GitHub oAuth 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30281732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com