Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

enhancer-thirdparty-api

Package Overview
Dependencies
Maintainers
1
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

enhancer-thirdparty-api

``` function(Enhancer, user, done) { var api = require('enhancer-thirdparty-api');

  • 2.0.6
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
22
increased by450%
Maintainers
1
Weekly downloads
 
Created
Source

自定义登陆相关配置

function(Enhancer, user, done) {
  var api = require('enhancer-thirdparty-api');

  api.login({
    enhancer: Enhancer, // 全局对象 可以直接引用
    user: user, //如果已经登陆, 可以通过 Enhancer.getCurrentUser() 来获取
    complete: function (err, message, data) { //登陆完成的回调
      /*
        err: 报错对象, 如果无值则表示没有错误
        message: 错误提示消息
        data: {
          method: 'enhancer', // 说明是通过查询用户表登陆的
          //method: 'enterprise_wechat', // 说明是通过企业微信登陆的
          //method: 'dingtalk', // 说明是通过钉钉自建应用登陆的
          //method: 'dingtalk_third', // 说明是通过钉钉第三方网站登陆的
          //method: 'wechat_mp', // 说明是通过微信公众号登陆的
          //method: 'wechat_mini', // 说明是通过微信小程序登陆的
          //method: 'wechat_web', // 说明是通过微信网站应用登陆的
          //method: 'alipay', // 说明是通过支付宝登陆的
        }
      */
      done(err, message);
    },


    /* 微信小程序的配置  */
    miniWechatUserId: 'MINI_WX_USER_ID',  // 在用户表中存放 微信小程序的用户ID 的字段名
    miniWechatAppId: '',  // 小程序的appId
    miniWechatAppSecret: '', // 小程序的appSecret


    /* 企业微信的配置 */
    entWechatUserId: 'ENT_WX_USER_ID', // 在用户表中存放 企业微信用户ID 的字段名
    entWechatCorpid: '',  // 企业ID
    entWechatCorpsecret: '',  // Corpsecre
    entWechatAgentid: '',  // 获取的AgentId
    wxEntInfo: false, // 是否需要获取企业微信登录人的用户信息
    wxEntNickname: 'WX_ENT_NICKNAME', // 用户表中存放企业微信用户昵称的字段, 当 wxEntInfo 为 true 时才生效
    wxEntAvatar: 'WX_ENT_AVATAR', // 用户表中存放企业微信用户头像的字段, 当 wxEntInfo 为 true 时才生效
    customInfo: function (info, end) { // 根据当前企业用户信息返回自定义用户信息
      /*
        end: 参考上面 complete 里面的 method, 但值不包含 'enhancer'
        info: { //企业微信中当前登陆用户信息
          "errcode": 0,
          "errmsg": "ok",
          "userid": "zhangsan",
          "name": "李四",
          "department": [1, 2],
          "position": "后台工程师",
          "mobile": "15913215421",
          "gender": 1,
          "tel": "62394",
          "email": "zhangsan@gzdev.com",
          "weixinid": "lisifordev",
          "avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0",
          "status": 1
        } 
        参考 https://doxmate.cool/node-webot/wechat-enterprise-api/api.html#api_user_exports_getUser
      */
      return {
        //根据 info 自定义要返回的字段, 返回的这些字段是否要入库 开发者自己在后面的步骤中决定
      }
    },


    /* 微信的配置 */
    mpWechatUserId: 'MP_WX_USER_ID', // 在用户表中存放 微信公众号ID(union_id 或 open_id) 的字段名
    mpWechatAppId: '',  // appId
    mpWechatAppSecret: '', // appSecret
    wxInfo: true, // 获取微信登录人的用户信息
    wxNickname: 'WX_NICKNAME', // 数据库里存储微信用户昵称的字段
    wxAvatar: 'WX_AVATAR', // 数据库里存储微信用户头像的字段
    customInfo: function(info, end) {//自定义获取哪些信息字段
      /*
        end: 参考上面 complete 里面的 method, 但值不包含 'enhancer'
        info: { //微信返回的用户信息对象
          "openid": "OPENID",
          "nickname": NICKNAME,
          "sex": 1,
          "province":"PROVINCE",
          "city":"CITY",
          "country":"COUNTRY",
          "headimgurl":"https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
          "privilege":[ "PRIVILEGE1" "PRIVILEGE2"     ],
          "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
        }
        // 参考 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
      */

      return {
        //根据 info 自定义要返回的字段, 返回的这些字段是否要入库 开发者自己在后面的步骤中决定
      }
    }, 
    /*微信网站应用配置(扫描二维码登陆)*/
    webWechatAppId: '',  // appId
    webWechatAppSecret: '', // appSecret



    /*钉钉的配置*/
    dingtalkUserId: 'DINGTALK_USER_ID, // 在用户表中存放 钉钉用户ID 的字段名 
    dingtalkAppKey: '',  // AppKey
    dingtalkAppSecret: '', // AppSecret
    ddInfo: false, //获取钉钉用户信息
    ddNickname: 'DD_NICKNAME', //用户表中存放钉钉用户昵称的字段
    ddAvatar: 'DD_AVATAR',   //用户表中存放钉钉用户头像的字段
    customInfo: function (info, end) {
      /*
        end: 参考上面 complete 里面的 method, 但值不包含 'enhancer'
        info: { //钉钉返回的用户信息对象
          "extension":"{\"爱好\":\"旅游\",\"年龄\":\"24\"}",
          "unionid":"z21HjQliSzpw0YWxxxxx",
          "boss":"true",
          "role_list":{
            "group_name":"职务",
            "name":"总监",
            "id":"100"
          },
          "exclusive_account":false,
          "manager_userid":"manager240",
          "admin":"true",
          "remark":"备注备注",
          "title":"技术总监",
          "hired_date":"1597573616828",
          "userid":"zhangsan",
          "work_place":"未来park",
          "dept_order_list":{
            "dept_id":"2",
            "order":"1"
          },
          "real_authed":"true",
          "dept_id_list":"[2,3,4]",
          "job_number":"4",
          "email":"test@xxx.com",
          "leader_in_dept":{
            "leader":"true",
            "dept_id":"2"
          },
          "mobile":"18513027676",
          "active":"true",
          "org_email":"test@xxx.com",
          "telephone":"010-86123456-2345",
          "avatar":"xxx",
          "hide_mobile":"false",
          "senior":"true",
          "name":"张三",
          "union_emp_ext":{
            "union_emp_map_list":{
              "userid":"5000",
              "corp_id":"dingxxx"
            },
            "userid":"500",
            "corp_id":"dingxxx"
          },
          "state_code":"86"
        }
        //参考 https://open.dingtalk.com/document/orgapp/query-user-details
      */
      return {
        //根据 info 自定义要返回的字段, 返回的这些字段是否要入库 开发者自己在后面的步骤中决定
      }
    }, // 自定义获取钉钉用户信息
    /* 钉钉第三方网站的配置 */
    dingtalkAppId: '',  // appId
    dingtalkUnionId: 'DINGTALK_UNION_ID', // 在用户表中存放 钉钉UNION_ID 的字段名
    dingtalkThirdSecret: '', // appSecret

    /* 下面是支付宝的配置*/
    alipayUserId: 'ALIPAY_USER_ID', //在用户表中存放 支付宝 user_id 的字段名
    alipayPrivateKey: '',
    alipayPubKey: '', 	  

    // 如果你希望自动为你实现登录逻辑, 请检查下面的配置是否和你的应用一致
    userTableName: 'USERINFO',  // Enhancer 应用的用户表表名
    userId: 'USER_ID',  // 在用户表中存放 用户ID 的字段名 
    userName: 'USER_NAME',  // 在用户表中存放 用户名 的字段名
    userRoles: 'USER_ROLES',  // 在用户表中存放 用户角色 的字段名
    password: 'PASSWORD',  // 在用户表中存放 密码 的字段名

    thirdpartyLogin: function (err, id, method, next) {// 自定义三方登陆的过程
      /*
        err: 错误对象
        id: 获取到的三方应用的用户id
        method: 参考上面 complete 里面的 method, 但值不包含 'enhancer'
        next: function (err, rows, data)  {//获取到自定义信息后, 可以继续调用这个函数完成登陆
          // err: 为错误对象
          // rows: 为登陆信息, 可以是通过 id 去用户表里查出来的数据
          // data: [id] 
        }
        // next(err, rows, [id])
      */
    }, 

    enhancerLogin: function (id, method, next) {
      /*
        id: 绑定id
        method: 参考上面 complete 里面的 method, 但值不包含 'enhancer'
        next: 参考上面 thirdpartyLogin 中的 next
      */
    },

    customBind: function (id, method, info) {// 自定义三方账号和enhancer应用账号的绑定
      /*
        id: 绑定id
        method: 参考上面 complete 里面的 method, 但值不包含 'enhancer'
        info: 参考上面各个端上 customInfo 中的 info
      */

      // 根据info信息自己去完成和系统用户的绑定
    }

    multipleUser: function (rows, data) { //当获取到的用户有多个时, 自定义返回哪个
      /*
        rows: 多个登陆用户的信息
        data: 是一个数组, data[0] 为三方应用id
      */
      return rows[0];
    }

    statusCheck: function (row) {//根据当前获取的登陆用户信息返回用户是否被禁用
      /*
        row: 登陆用户的信息
      */

      return '该账号已经被禁用'; // 如果返回了字符串 则认为该用户被禁用了 且字符串会被用作提示消息
    }

    bindVariable: true, //是否将登陆用户信息(row)里的字段自动绑定到系统变量里, 绑定后就可以直接使用 后端: @xxx@ 或 前端:@1-xxx@

    customWhere: function(user) { //自定义自动登陆时 sql 的where 条件
      return {
        where: `user_id = ? and password = ?`,
        param: [user.getId(), user.getPassword()]
      }
    }, 

    lang: 'zh-cn'
  });
}

启动函数里的配置

function (Enhancer, done) {
  var  api = require('enhancer-thirdparty-api');

  /* 企业微信 */
  api.setEntWechat({
    enhancer: Enhancer,
    entWechatCorpid: '', // Corpid
    entWechatCorpsecret: '', // Corpsecret
    entWechatAgentid: '', // Agentid
  });
  const entWechat = api.getEntWechat();
  entWechat.getCacheToken((err, token)=> {}) //获取当前token

  api.setEntApps([ //设置多个企业微信账号
    {
      enhancer: Enhancer,
      entWechatCorpid: '应用1 Corpid'
      entWechatCorpsecret: '应用1 Corpsecret'
      entWechatAgentid: '应用1 Agentid',
      login: true // 表示用这个应用去实现免登
    },
    {
      enhancer: Enhancer,
      entWechatCorpid: '应用2 Corpid'
      entWechatCorpsecret: '应用2 Corpsecret'
      entWechatAgentid: '应用2 Agentid'
    }
  ]); 

  const apps = api.getEntApps();
  /* 企业微信 */




  /* 微信 */
  api.setMPWechat({
    enhancer: Enhancer,
    mpWechatAppId: '',  // 请修改成对应的值
    mpWechatAppSecret: '', // 请修改成对应的值
    webWechatAppId: '',  // 请修改成对应的值
    webWechatAppSecret: '', // 请修改成对应的值
  });
  const wechat = api.getMPWechat();
  wechat.getCacheToken((err, token)=> {}) //获取当前token
  // https://github.com/node-webot/wechat-api
  /* 微信 */


  /* 钉钉 */
  api.setDingTalk({
    enhancer: Enhancer,
    dingtalkAppKey: '', // AppKey
    dingtalkAppSecret: '' // AppSecret
  });
  const dingding = api.getDingTalk();
  dingding.getCacheToken((err, token)=> {}) //获取当前token
  // https://github.com/ali-sdk/node-dingtalk
  /* 钉钉 */

  /* 微信小程序 */
  const miniWechat = api.getMiniWechat();
  miniWechat.getCacheToken((err, token)=> {})
  /* 微信小程序 */

  done();
} 

具体各端的具体配置请参考

FAQs

Package last updated on 02 Jul 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc