Skip to content

401 “授权失败”,让插件支持 https,鼓捣了很久希望能帮到有同样问题的人 #25

Description

@zhishuai-tang

如果 gitlab 是采用 https 协议连接,会报 401授权失败的错误

  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){
              ...
       });
       ...
    });
}
  1. 修改 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) {
                ...
            });
    });
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions