上两篇文章说了,如何在Web端实现Google/Facebook的第三方登录。
这就简单说下 Electron 实现第三方登录。
其实,整个流程中与Web版本最大区别就是,如何获取回调的参数。
Electron 监听回调URL
//注册监听事件
OAuth.webContents.on('did-navigate', (event, url) => {
let raw_code = /access_token=([^&]*)/.exec(url) || null;
let access_token = (raw_code && raw_code.length > 1) ? raw_code[1] : null;
let raw_state = /state=([^&]*)/.exec(url) || null;
let state = (raw_state && raw_state.length > 1) ? raw_state[1] : null;
let raw_time = /data_access_expiration_time=([^&]*)/.exec(url) || null;
let expiration_time = (raw_time && raw_time.length > 1) ? raw_time[1] : null;
// let error = /\?error=(.+)$/.exec(url);
//获取到三个参数,即视为登录成功
//PS:其实还应该验证回调域名是否匹配
if (access_token && state && expiration_time) {
//向登录窗体发消息,通知器第三方登录成功,继续走原来的流程
AuthUI.webContents.send('oauth.success', {
access_token: access_token,
state: state,
expiration_time: expiration_time,
type: 'facebook'
});
//登录成功后销毁窗体
OAuth.destroy();
}
});
Electron 注册全局过滤器
当然也可以通过注册全局过滤器,来实现~