Explorar o código

云就业免登录相关

lrf hai 1 ano
pai
achega
e4055ba4f3

+ 20 - 4
app/controller/yunjiuye.js

@@ -1,19 +1,26 @@
 'use strict';
 const Controller = require('egg').Controller;
+const { BusinessError, ErrorCode } = require('naf-core').Error;
 class YunjiuyeController extends Controller {
   constructor(ctx) {
     super(ctx);
     this.service = this.ctx.service.yunjiuye;
+
   }
   // http://127.0.0.1:7001/api/train/y/login?code=中心&org=0
   async login() {
-    const query = this.ctx.query;
-    const { code, org } = query;
-    const res = await this.service.checkUserIsConnect(query);
+    this.service.getDomain();
+    const pstr = this.ctx.request.querystring;
+    let params = pstr.replace('params=', '');
+    if (!params) throw new BusinessError(ErrorCode.BADPARAM, '缺少登录参数');
+    params = this.service.decryptData(params);
+    if (!params) throw new BusinessError(ErrorCode.BADPARAM, '参数解析失败');
+    const { code, org, type } = params;
+    const res = await this.service.checkUserIsConnect(params);
     const { toBindPage, toDealTokenPage } = this.app.config.yunjiuye;
     // 没关联,转到登录页面
     if (!res) {
-      this.ctx.redirect(`${toBindPage}?code=${code}&org=${org}`);
+      this.ctx.redirect(`${toBindPage}?code=${code}&org=${org}&ytype=${type}`);
     } else {
       // 已关联,转到加载token页面
       const token = await this.service.userToken(res);
@@ -29,5 +36,14 @@ class YunjiuyeController extends Controller {
     const token = await this.service.userToken(res);
     this.ctx.ok({ data: token });
   }
+
+  async logout() {
+    const query = this.ctx.query;
+    const { id } = query;
+    const data = await this.service.getBindInfo(id);
+    const encDataStr = this.service.encryptData(data);
+    await this.service.yLogout(encDataStr);
+    this.ctx.ok();
+  }
 }
 module.exports = YunjiuyeController;

+ 1 - 1
app/model/teacher.js

@@ -42,7 +42,7 @@ const TeacherSchema = {
   phone: { type: String, required: true, maxLength: 200, zh: '手机号' }, // 手机号
   gender: { type: String, required: false, maxLength: 200, zh: '性别' }, // 教师性别
   idnumber: { type: String, required: false, maxLength: 200, zh: '身份证号' }, // 身份证号
-  secret: { type: String, required: false, maxLength: 200, zh: '密码' }, // 教师性别
+  secret: { type: String, required: false, maxLength: 200, zh: '密码' },
   // zynumber: { type: String, required: false, maxLength: 200 }, // 职业资格证号
   zynumberfile: { type: [ zynumberfileInfo ], select: true }, // 职业资格证图片
   schid: { type: String, required: false, maxLength: 200 }, // 学校id

+ 1 - 0
app/model/yjyconnect.js

@@ -6,6 +6,7 @@ const metaPlugin = require('naf-framework-mongoose/lib/model/meta-plugin');
 const YjyconnectSchema = {
   ycode: { type: String, required: true, maxLength: 200 }, // 云就业标识
   yorg: { type: String, required: true, maxLength: 200 }, // 云就业机构
+  ytype: { type: String, required: true }, // 云就业身份标识
   suid: { type: String, required: true, maxLength: 200 }, // 双困生用户表id
 };
 

+ 3 - 0
app/router.js

@@ -6,6 +6,8 @@
 module.exports = app => {
   const { router, controller } = app;
   router.get('/', controller.home.index);
+  // 云就业退出
+  router.get('/api/train/y/logout', controller.yunjiuye.logout);
   // 云就业登录
   router.get('/api/train/y/login', controller.yunjiuye.login);
   // 云就业登录
@@ -183,6 +185,7 @@ module.exports = app => {
   router.resources('experience', '/api/train/experience', controller.experience); // index、create、show、destroy
   router.post('experience', '/api/train/experience/update/:id', controller.experience.update);
   // 职责说明表设置路由
+  // 没用
   router.resources('duty', '/api/train/duty', controller.duty); // index、create、show、destroy
   router.post('duty', '/api/train/duty/update/:id', controller.duty.update);
 

+ 99 - 7
app/service/util.js

@@ -85,13 +85,105 @@ class UtilService extends CrudService {
     return res;
   }
   async utilMethod(query, body) {
-    const arr = this.app.router.stack;
-    const list = [];
-    for (const i of arr) {
-      const { name, methods, path } = i;
-      list.push([ name, methods, path ]);
-    }
-    await this.toExcel(list);
+    const crypto = require('crypto');
+    const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
+      modulusLength: 2048,
+      publicKeyEncoding: {
+        type: 'spki',
+        format: 'pem',
+      },
+      privateKeyEncoding: {
+        type: 'pkcs8',
+        format: 'pem',
+        cipher: 'aes-256-cbc',
+        passphrase: 'sks_secret',
+      },
+    });
+    console.log(publicKey);
+    console.log('-------------------');
+    console.log(privateKey);
+    //     const privateKey = `-----BEGIN ENCRYPTED PRIVATE KEY-----
+    // MIIJrTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI+SbyJ6RzQY8CAggA
+    // MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBACELvWKbd/L0zagGXmrwrKBIIJ
+    // UBn774mFtXJgWi9NVh+GO5CpcqDxU2JjP+lOILG0k9EIJiwVBH++LHtJX4S9Y7MP
+    // qtJQZBLSdyjh7mzMige/xTSEkF2wGactP1QE2imfcT52NoHGQVyeFBfa+ZEZixPU
+    // h/6uqS8TjABU561I3A/89vHYLrZ9va1T8AZTp4NbyUaD5zYCPUG+mn9Ln9PO56Bk
+    // HEUXfZa2qGU819CxC2Ju4T/KMLDXHKVbbCiDnB1vLxuO4vSd8719nwR9czfTkGKv
+    // MJtk7wbFUrstmEVFBM931D6wNT/BHtYGCf2xw10CwtSjLKbB/iINqH5CUYMjA6H8
+    // 4ts7nBHkmkuRa5bGZSHeCR25fLE6i/WU0mAB4gnaU3nSmInA2JF5QFKV/2+RsZBN
+    // DCAU8TwjnsY4dsqwC0CjUPY3EguiuXAVZ3eQO43ERIVuK6flfY1vaK1186KAfLf9
+    // 9dYMcoag8ohs22etBiFVQZMy8YTC7knndyMyP+c/ohgENzUc1lPVHj1n0kGW2Mgu
+    // Gc4mLXTmifr3SM/Z5cUI97i/OZ1aYm01G2UiR2ZLLdLSwuBoqs2J1r5Xk97BqaPm
+    // f93PgENfafd7Sd+RH1f635FMKM61NbZBzNMDJmKW1B4RgezLgxanJy5AqJNGfiuS
+    // 9m0daXKPEhAhh+Hx5LEYXxuSVgaSAJtvOZze5yHA/kHEy5+DZ5Gv31brEVHmAphA
+    // EFSdtDbf44hqGMk2LAeiahkqc+MXz+RVFAvuh24qR8NeulIszu5ExHM13ZVL1GIP
+    // IqnplKnX/Xjt8j1CJOxgiHJvqcX3LAg0NDh0CbmpSJVjjL/yqxwYMBSiLgS8ViT+
+    // AaGqLvuT95Oyq7IiMDngymTMT4ilWjeY+ovFWC3JxwCL8kzFVFBL680JhOlvBVft
+    // e9+JbJeV3xAq482FolBRXla6Eqe1eeFVjmY8+n/UqepT8CLk7hJxzN0VCVJsx7VT
+    // wlBjRobcIdaLtwJllu7Ebpc2MwLVgPJvvNHigLJVNW5SyHhleT2pJZDROgm+0itc
+    // 39L8MN5Jo/q/wqO1KO+Fx17xNiMhQr7rs+9zcy8a1/D8v0zmNbpayWx8z0V6TyYJ
+    // 2QhQAPuO7mnxsbzZPEnj93+2ifoojU3YOgvxQCUR4LNbreScSotJmX8ADi9rpmgp
+    // VxSUSpZ9smzX2kVMPQPWCOuNzuCJIGPmwI1+2wSGgYkPW1hjVReQTevrIt6YMKxh
+    // 7NuiJ9Hzi96uGAlcfPPp85wR2NUGJ+++lu6874AHa4nfwrxBqps/e/IFgbxfOXoo
+    // ZS1thHfViSlPeV6+gv2OdBb6mZbMlH2UWjKuXmvYPSKBy/PA3Kl9gyYbOnpBb7Cz
+    // Bt0jpx0oJtWmndzXpRRDOj/ehppSe1tbhe3D1Eg1EOn3C0IS284dQ2JzMATbdxV3
+    // okrKYcIxuYvCVNjgAo+GdfC+V3A4c15HlPjYsgy8hLIZGWbfFvNIFPNw7LmxAG6w
+    // UD+EAFKtijRV/vKjMraiVfaB8LQ+QLgBkgE+8JFRkFUmwzCWB2KoewHPUbk+7/a1
+    // 7PQx0+sk+ghIb6lkC0EOcAFjfDiQYJttZ/ax3txR76hHNHOcMKeFp5DgwBzlvllR
+    // BHKRDHflyr6CGf9gTMw83xwHp9HCpz/BleBLvoMd23FZ/BXkHlBWUusfLlUj+iNp
+    // uQuM/xXNZ9JTixibCcQzC5KFJsOcnGWkoID/nT22iR4G2nqivHcbq3GM/s+Ty9zQ
+    // q7Pot2cCkPOSuacyuZxrBsWmSGVibMnYEDcWs4N3Vsgw+hrk886VLDNEt7bDwy83
+    // KQflDKNSwEeav6NceWywmMWP6lQQoCPQtuUxdBpJ/vanrEOU8Tg5/PNiqnqtqtN2
+    // Z6g3ZNyGFaYXkzxizznrIaH81HUmC5wVHmozzH7FiLqIt2yj+IbOBD9T4KiarnQX
+    // zsgR+eYbHUO7wzOvlMj0O3n1jMHK01gBe5IlGcPW/n4/mUp8qACgVipKhO45NxL8
+    // u9+BcPoBNCFD23sCnjUHChGHEhfNyQutjXyFUzmIkni4M5idudgri7KDHAdt/Sid
+    // 6X2/R+b/p5zK9DqqtaEeRyQutzBJsCHaup9w46ySuen+NdfbCzITvaDpOpQJua9x
+    // 4R+YEE6h31tlp13whR3wKNs7nrpS9oRQo3tXKIzDSXYZM81DuSR1fJ+6H9yAfkg5
+    // 4ScerEFSU+nvwzx5Gpj8AfDQHKHOAb6uGjGMp2bDhIWqqYJZS5JkcqF3CNr7C6EE
+    // A8iGy/QisX2cxquT2uKjjoIVSVVQKjrV4LI3f13bHEJ5I6RBrSWNic7WAKBkjxTH
+    // OPtuz2cgL5KAs/hvhMqVaEmeGvC9mW0jy3S0rFFMZapb8OFfFM2fEVNNzMvVy2Gd
+    // RAZMPY4hzyqHzlLDUOF8fGa+Tly6cG0Rjvt+EsGy7w3yhR4FEUD71T2Hdh4Qlj+f
+    // J1TDw6uEHFoYZQB9mRM+b7zDZX6Q7f4Yqk8Zp4bmlvdvoPtFS8ai8qosHDKZfuJe
+    // 5yRQhx7GUL6se2kzcb12ZvHWdq4i9DRZ9mamcr4lnqWc1lWF/yPxow42fcGEYiSn
+    // fg458CL16dV2JMrlNI67KX/oxKQbtI8Qqow9GA0xHT9APeRHDwQH9hhPE+I9nzjk
+    // vXiKSk1CyQcMFJv63Jelq9v9SlM4OhbLM6BnBMCc5UqZ5y7plN+j+1y07+TVB+qE
+    // 1b8WXHKkWNm1PyUkX57amLjHzvk/z7yIAWQV35ZuZe0Hq65QfNuG8T6aMTNEUEVj
+    // ciuYB1KM5XhtTJvn/EyDktpCMvPF5X++uT6Pq2dbHUSVng/JHWm8qOStBnzosvHR
+    // Ebmw4uSELfqrIONBid3rUNJ0HuLhm9IcSspj+kmAkumOjX8tQ/GER/3DKs7phjir
+    // sCAQBf9BxnJUICP8jbr+OYXfJs6FsPNrtEZOg+78BdFQpWGgLptUWRTjHUPR3bb2
+    // J2i7ADAgW2t6eh+bhJ5JyDQ0xqGRVx57mHOvAlKkaa/GNMVexTqEH4eybilsQCpY
+    // jEtwj9SJMe5jD3J4hzAQUaeOfyruuZ2R2nC1C/070TRL6qXf6DNnWeXiYIOuYW36
+    // ere7RirrD3vwbgu1jzsixYgGSRXLYis42brchhzw7+9Ut3vvQCMc03aO3fe+6Aji
+    // WZo3nW1v3vEf3fS4fFtQF7VP1a2A0Leawv7ZxXUS2A8S
+    // -----END ENCRYPTED PRIVATE KEY-----`;
+    //     const publicKey = `-----BEGIN PUBLIC KEY-----
+    // MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzGSOl6+oYHZyHRzJYtC3
+    // wlqczFs2QKHLi6bnQj1Sb6J4Kx0UkJqb2yJpyFenBTjW+W4rMM7bt9RzM4pHqjWI
+    // ubTDFL8aU8R1LxOI/9HqpC9CTyZpmGjrCZoJz07sMz/RNo6e8nwpAdEN3Z8sSaGD
+    // Wm+Jv8uk8NtXDksyXa9b1aAylxMCIu+yg1V+QvAqfxFW2HHQodjE1/8/QNMqPr90
+    // DoCS35atn5vl6XQyHY40jk5r6it/zr7IBkuZnPJHSL3Mcvf2lZXYSg4Q2TQ9q4G5
+    // zx4UsYK3oPI/bP4+KK2o+nmdHjP+YlWpgIjMOZ7bYBu90APHUaRskRAwbruBdN0v
+    // UQuUvrZ+ePptXBwvqDycCwF0VVYSUKWC0rCkk+zGNiramsILRGEbkHZ0OCIW6vs1
+    // aijKiUbDLVFXRjzwKFlrczt0DszEZDvBbVU6aaia1fvHoMTa9Qh48IL7czncgwc+
+    // 7n8IxyiE69PAB/Y54AoNbANsAjbHJKL5POE3g4BfJfvzGStTGHT08tdMwfyWlKa4
+    // V1f9/W1PiPvr018oTyEpjYuitA1AsslJWce2PysVQc5w4EVJHMSz9feqNYv8eFSD
+    // rEXSHLXwtK0TK8asdX13zi2klGe6zpkejAuLVq+PUbMV6RzTLue5qlOp/pwGuVFM
+    // Z9vYX8dtRkmfeDitSjRTpEkCAwEAAQ==
+    // -----END PUBLIC KEY-----`;
+
+    const data = { code: '1', org: '2', type: '中心管理员' };
+    const enc = crypto.publicEncrypt(publicKey, Buffer.from(JSON.stringify(data)));
+    const str = enc.toString('base64');
+    console.log(str);
+    const sb = Buffer.from(str, 'base64');
+    const decpub = crypto.privateDecrypt(
+      {
+        key: privateKey,
+        passphrase: 'sks_secret',
+      },
+      sb
+    );
+    console.log(`decpub:${decpub.toString()}`);
     // for (const trainPlan of allTranPlan) {
     //   const { termnum = [] } = trainPlan;
     //   const termids = termnum.map(f => ObjectId(f._id).toString());

+ 89 - 9
app/service/yunjiuye.js

@@ -4,34 +4,67 @@ const assert = require('assert');
 const _ = require('lodash');
 const { BusinessError, ErrorCode } = require('naf-core').Error;
 const { ObjectId } = require('mongoose').Types;
+const crypto = require('crypto');
+// 云就业生成的公钥,用来加密退出登录的参数
+const publicKey = `-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDafDeoNSNhqaj0dEK3bK/nXnGe7QdQHTegc49/jFHtbky3gZle0XKvbqPHv8d9eih89RJe3UOORUhBV6eRkvCLaf8lj+BgI0TyWDgjHg1jGi6MN+LZx9GKZ/Tq+TVPH3Fv/YPGcQADb4lELwSK3F6kRcm1duwcij0bnFhfTA999QIDAQAB
+-----END PUBLIC KEY-----`;
+// 双困生生成的私钥,用来解密登录的参数
+const privateKey = `-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIDrmClOodJAACAggA
+MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDFUSMr1yfAK9Lt9r4Idi5EBIIE
+0JmkwwNWz+ya4IffVvzQS2fEbIRoAcxoBEKaZjLd2cCBQbE/0BODdlEWcJ7Z4Z3k
+1NfDaqQToh+k9sE2C108q2jCETLiLPWodTMAMO0pVHBiiJeh2ZOoDxwyDWsyHYcA
+6S7EhuQPOY7Fd8WKWeYcH1m8TLyL40fmWq0cseCoyvP1M0LRQ5OFKD7+uOYJBQhq
+7pPwuJouorKMUHbxpribrOmr8fspfkglhP6+TZ7p7XzAs6e92mNz1SfiflmChoPH
+sqcJb0SJaHCdzblMT/yCF1Gm+h91gpU9L3sJUbivBtjFkX4LsE8DMs15dkPIbWHq
+YTJx+2QSOpGp6cK1D7LS8LInptHxI/UGRVYH3FLP1oUJuuFj+Wl7PKvOpZcc5uk1
+u5tbHmUkhpJeklqsCWi6brQpPxiQAiCeiqMiTOQLlwiRNTT51waOqrvb60onDHAw
+bEWfb0FQ0o3kb1yEQd/qPTJXWPZ96WhM3/7VNGoEDKwCzv5m8G1JbO4ct79iPF5x
+Y7rx0uKJFPbekNACRmb9U0f3DpXm8hdgCKVKmbkgG2ZZnnmJg2lzmT72lwQfdcnv
+O6IjXVLoDLjAYqjGe6HXQchi5rBHgmoguyHP6nGJ67n50hQ+upecVyp7k7LvuXi/
+jHF8/zJfDZaEvjf6CwkePYk9XbOnvyls+RWZM1ZwX4xbk6nbONzo71uRrI0E8sKS
+kWFCtvdbNJ//PaugrQNRMTs5z8Q3qMIyXRPXrxPFM/3lECaIEYvRrPyEYfdANqod
+JrMru+hbHvutTPhDuOgJ+RVgirwfZpxPQS5aHHXQu8bMps9DEL15i6xKOVX5lqvL
+lEL0YmqmRo7Idb9D+l0pyPAg9X1AwTziION/1cOPvWmjGVZqqaBv+jsMVlB+1o0o
+BrJBy9SEzw5ya7sYi1BCwO6k7qAsB1qSmnu8Gg/RXAIz6D9nJiJbB5kwusVQretn
+RqTj8ldBOgo+1la3hHzW8INTAVrlnmZjNMEGN4olYcJv6vHK9XTk7ruIkteJYD8Y
+2jIFU3evsPTs4ugYxArEmzYsr1ZJR91aWf7naKcUlsap9k2zgHVw7Ks31D8T1OT3
+mXQZdkY9hx+0kdh8iSYOkCSa237usV/TbYg12ncB8xSVsMQMNnEQHWIcgFUBeZoo
+KQ27ijLmy5YYx8KYDAm7UJZ3Z00OrFa1D5qjippXkrDKbBwM3SrDSSVBtfKMGxyi
+epF9hMBs6ecBBSIF9sZg0LHfMlbOIWyNLklHUtdBQ4+vavzbG1V66p0pB7HJp6rp
+YC3moNRhHXyUFpvkIis7gFQ4xdE6FMEJsrHeZQHuOzRIB4XlwiCiAIg+IDmnP0hd
+8Sxv0drpFU+zjR2aMr4bfhYdBG35NE/xfOp+ba25yCWCilljCIj46+jD0E2UvSrw
+9iDtf75OXF2njqaLwmnFtHyAOA54IcXi9Y3NaXUXFxmK9iif5UbKa/dR+8rmOCF2
+cozCs4Ujribcpgs3cqjkVX0Z12B7YdCZM1Tpj7BgPOLjpi0h0s5wbP9QMm3yb2S2
+SKteoIypVcUXdpPqSwXtsUOUSuj7MeNXW2mkmQsH+W/n2Zn5OxgFKZ0JZ4z/OHei
+hK1UFYPQ9BEBMzsJ2ttBLwak//hAMaUJDT8EKxEoBdqb
+-----END ENCRYPTED PRIVATE KEY-----`;
 class YunjiuyeService extends Service {
   // 检查用户是否和云就业有关联
   // 没关联就直接重定向到关联页
   // 有关联就直接去登录
-  async checkUserIsConnect({ code, org }) {
+  async checkUserIsConnect({ code, org, type }) {
     assert(code, '缺少用户标识');
     assert(org, '缺少机构');
     const yjycModel = this.ctx.model.Yjyconnect;
-    const result = await yjycModel.findOne({ ycode: code, yorg: org }).lean();
+    const result = await yjycModel.findOne({ ycode: code, yorg: org, ytype: type }).lean();
     if (!result) return false;
     return result.suid;
   }
 
   // 用户与云就业关联
-  async userBind({ type, mobile, passwd, code, org }) {
+  async userBind({ type, mobile, code, org, ytype }) {
     assert(mobile, '登录账户不能为空');
-    assert(passwd, '密码不能为空');
     assert(type, '用户角色不能为空');
+    assert(ytype, '身份不能为空');
     const userModel = this.ctx.model.User;
-    const res = await userModel.findOne({ mobile, type }, '+passwd');
+    const res = await userModel.findOne({ mobile, type });
     if (!res) {
       throw new BusinessError(ErrorCode.USER_NOT_EXIST);
     }
-    if (res.passwd.secret !== passwd) {
-      throw new BusinessError(ErrorCode.BAD_PASSWORD);
-    }
     const yjycModel = this.ctx.model.Yjyconnect;
-    const obj = { ycode: code, yorg: org, suid: ObjectId(res._id).toString() };
+    const obj = { ycode: code, yorg: org, suid: ObjectId(res._id).toString(), ytype };
     const isHas = await yjycModel.count({ suid: obj.suid });
     if (isHas > 0) throw new BusinessError(ErrorCode.DATA_EXISTED, '账户已绑定,无需再次绑定');
     await yjycModel.create(obj);
@@ -48,5 +81,52 @@ class YunjiuyeService extends Service {
     const token = await userService.createJwt(user);
     return token;
   }
+
+  async getBindInfo(suid) {
+    const yjycModel = this.ctx.model.Yjyconnect;
+    const info = await yjycModel.findOne({ suid }).lean();
+    if (!info) throw new BusinessError(ErrorCode.SERVICE_FAULT, '为找到与云就业绑定信息');
+    const data = { code: info.ycode, org: info.yorg };
+    return data;
+  }
+  async yLogout(params) {
+    const domain = await this.app.redis.get('yjyDomain');
+    if (!domain) throw new BusinessError(ErrorCode.SERVICE_FAULT, '缺少登录时的域名');
+    const uri = `${domain}/auth/logout?params=${params}`;
+    const result = await this.ctx.curl(uri, {
+      dataType: 'json',
+    });
+  }
+  // 加密,使用云就业提供的公钥对数据进行加密,供退出登录加密参数使用
+  encryptData(data) {
+    const enc = crypto.publicEncrypt(
+      {
+        key: publicKey,
+        padding: crypto.constants.RSA_PKCS1_PADDING,
+      },
+      Buffer.from(JSON.stringify(data))
+    );
+    return enc.toString('base64');
+  }
+  // 解密,使用双困生提供的私钥对数据进行解密,供登录解析参数使用
+  decryptData(encstr) {
+    // encstr = encodeURIComponent(encstr);
+    const sb = Buffer.from(encstr, 'base64');
+    const dec = crypto.privateDecrypt(
+      {
+        key: privateKey,
+        passphrase: 'sks_secret',
+        padding: crypto.constants.RSA_PKCS1_PADDING,
+      },
+      sb
+    );
+    if (dec) return JSON.parse(dec.toString());
+    return false;
+  }
+  async getDomain() {
+    const request = this.ctx.request;
+    const origin = request.URL.origin;
+    await this.app.redis.set('yjyDomain', origin);
+  }
 }
 module.exports = YunjiuyeService;

+ 7 - 1
config/config.default.js

@@ -12,7 +12,7 @@ module.exports = appInfo => {
    * built-in config
    * @type {Egg.EggAppConfig}
    **/
-  const config = exports = {};
+  const config = (exports = {});
 
   // use for cookie sign key, should change to your own and keep security
   config.keys = appInfo.name + '_1578642242928_5726';
@@ -150,6 +150,12 @@ module.exports = appInfo => {
     toBindPage: 'http://jytz.jilinjobs.cn/y/', // 云就业绑定页面
     toDealTokenPage: 'http://jytz.jilinjobs.cn/y/deal', // 云就业免登录处理token路由
   };
+  config.httpclient = {
+    request: {
+      // 默认 request 超时时间
+      timeout: 3000,
+    },
+  };
 
   return {
     ...config,

+ 2 - 2
config/config.local.js

@@ -61,8 +61,8 @@ module.exports = () => {
   // };
 
   config.yunjiuye = {
-    toBindPage: 'http://127.0.0.1', // 云就业绑定页面
-    toDealTokenPage: 'http://127.0.0.1', // 云就业免登录处理token路由
+    toBindPage: 'http://127.0.0.1:8008/y/', // 云就业绑定页面
+    toDealTokenPage: 'http://127.0.0.1:8008/y/deal', // 云就业免登录处理token路由
   };
 
   return config;