插件不支持 https 协议,会报 401 “授权失败” 的错误。通过修改插件源码添加 https 协议支持。
1. 修改 controller/oauth2Controller.js 文件
const https = require('https'); // 添加 https 依赖
const fs = require('fs'); // 用于证书文件读取
// 修改 requestInfo 方法,如果配置的 host 地址是 https 的则通过 https 的方式发送请求
requestInfo(ops, path, method) {
return new Promise((resolve, reject) => {
let req = '';
let client = http; // 默认为 http 请求
let options = {
method: method
};
if (ops.host.indexOf('https') === 0) { // 如果 host 以 https 开头
client = https; // 将连接设置为 https
// gitlab 证书是自己生成的不获取证书文件会报 UNABLE_TO_VERIFY_LEAF_SIGNATURE 错误
// 这个错误可以通过两种方式解决(任选一种即可):
// 1)options.rejectUnauthorized 设置成 false
// 2)将 ssl 的根证书文件赋值给 options.ca
options.ca = fs.readFileSync('[path to our CA cert file]');
}
let http_client = clent.request(ops.host + path,
options,
function(res){
...
});
...
});
}
2. 修改 server.js 文件
const fs = require('fs'); // 用于证书文件读取
module.exports = function (options) {
const {emailPostfix, emailKey, userKey, host, loginPath, redirectUri} = options;
this.bindHook('third_login', (ctx) => {
let token = ctx.request.body.token || ctx.request.query.token;
// 如果是 https,设置 options.ca 参数,或者将 options.rejectUnauthorized 设置成 false
let options = host.indexOf("https") === 0 ? {ca: fs.readFileSync('[path to our CA cert file]')} : {};
return new Promise((resolve, reject) => {
// 发送请求时,传递 options 参数
request(host + loginPath + "?access_token=" + token,
options,
function (error, response, body) {
...
});
});
}
网友评论