enhancer-thirdparty-api
v2.0.7
Published
``` function(Enhancer, user, done) { var api = require('enhancer-thirdparty-api');
Downloads
128
Readme
自定义登陆相关配置
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": "[email protected]",
"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
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":"[email protected]",
"leader_in_dept":{
"leader":"true",
"dept_id":"2"
},
"mobile":"18513027676",
"active":"true",
"org_email":"[email protected]",
"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', // 在用户表中存放 密码 的字段名
customWhere: function(user) { //自定义自动登陆时 sql 的 where 条件 和参数
return {
where: `user_id = ? and password = ?`,
param: [user.getId(), user.getPassword()]
}
},
thirdpartyLogin: function (err, id, method, next) {// 自定义微信(钉钉等三方)应用登陆的过程
/*
err: 错误对象, 此参数已经废弃
id: 微信(钉钉等三方)应用id
method: 参考上面 complete 里面的 method
next: function (err, rows, data) {//获取到自定义信息后, 可以继续调用这个函数完成登陆
// err: 为错误对象
// rows: 为登陆信息, 可以是通过 id 去用户表里查出来的数据
// data: [id]
}
// next(err, rows, [id])
*/
},
enhancerLogin: function (id, method, next) { // 自定义通过账号密码登录的过程
/*
id: 微信(钉钉等三方)应用id
method: 参考上面 complete 里面的 method
next: 参考上面 thirdpartyLogin 中的 next
*/
},
customBind: function (id, method, info) {// 自定义微信(钉钉等三方)应用id和enhancer应用账号的绑定
/*
id: 微信(钉钉等三方)应用id
method: 参考上面 complete 里面的 method
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@
lang: 'zh-cn' // 如果值不为 zh-cn 则认为是英文
});
}
enhancer-thirdparty-api 组件免登主要功能
下面将 enhancer-thirdparty-api 称为组件
通过 enhancer 系统的账号密码登录
1.1 如果配置了 enhancerLogin 函数, 则你希望自定义登录过程
enhancerLogin: function (id, method, next) { /* id: 如果有值 表示从微信(钉钉等)三方获取到的id method: 参考上面 complete 里面的 method next: 回调函数 调用后继续执行后续的登录操作 */ const db = Enhancer.getDatabaseService(); const uid = user.getId(); const pwd = user.getPassword(); const sql = 'SELECT * FROM USERINFO WHERE USER_ID = ? AND PASSWORD = ? '; db.execute(sql, [uid, pwd], function (err, result) { next(err, result); }); }
1.2 如果没有配置 enhancerLogin 函数, 则
组件
会根据用户名和密码组成sql
语句自动查询登录如果配置了 customWhere 则 1.2 中sql语句的where 条件 和 参数 由 customWhere 提供
customWhere: function(user) { return { where: `user_id = ? and password = ?`, param: [user.getId(), user.getPassword()] } }
通过 微信(钉钉等三方)账号登录
2.1 如果配置了 thirdpartyLogin, 则你希望自定义登录过程
thirdpartyLogin: function (err, id, method, next) { /* err: 错误对象, 此参数已经废弃 id: 表示从微信(钉钉等)三方获取到的id method: 参考上面 complete 里面的 method next: 回调函数 调用后继续执行后续的登录操作 */ const db = Enhancer.getDatabaseService(); const sql = 'SELECT * FROM USERINFO WHERE ENT_WX_USER_ID = ? '; db.execute(sql, [id], function (err, result) { next(err, result); }); }
微信(钉钉等三方)账号第一次登录后 将三方获取的id 绑定到 用户表里
3.1 如果配置了 customBind, 则你希望自定义绑定过程
customBind: function (id, method, info) { /* id: 表示从微信(钉钉等)三方获取到的id method: 参考上面 complete 里面的 method info: 参考上面各个端上 customInfo 中的 info */ const db = Enhancer.getDatabaseService(); const uid = user.getId(); const sql = 'UPDATE USERINFO SET ENT_WX_USER_ID = ? WHERE USER_ID = ?'; db.execute(sql, [id, uid], function (err, result) { }); }
启动函数里的配置
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();
}