1、从后台获取corpId;
// 获取corpId(鉴权接口) const getCorpId = () => { return new Promise((resolve, reject) => { this.$post( `${this.apiHead}/baseServer/baseLoginService/getDingDingConfig`, { params: '{"redirectUrl":"www.abc.com","appId":"daogou"}', } ) .then((res) => { let { data } = res; data = JSON.parse(data); resolve(data["corpId"]); }) .catch((err) => { reject(err); }); }); };2、以corpId为参数向钉钉请求用户authcode;
const getCode = (corpId) => { // 获取authCode // alert(corpId); return new Promise((resolve, reject) => { this.$dd.runtime.permission.requestAuthCode({ corpId: corpId, // 企业id onSuccess: (res) => { const code = res.code; // 通过该免登授权码可以获取用户身份 resolve(code); }, onFail: (err) => { this.logining = false; alert("获取code失败" + JSON.stringify(err)); this.$toast("登录失败,请刷新"); reject(err); }, }); }); };3、然后以authcode为参数,向后台请求用户数据(信息);
const getUser = (code) => { // 获取用户信息 // alert(code); return new Promise((resolve, reject) => { const url = `${this.apiHead}/baseServer/baseLoginService/dingDingLogin`; this.$post(url, { params: `{"redirectUrl":"www.abc.com", "code": "${code}", "domain": "ssssss","appId":"daogou"}`, }) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); }); }; this.$loading.open("登陆中"); const corpId = await getCorpId(); const code = await getCode(corpId); // alert(code); getUser(code) .then(async (res) => { // alert(JSON.stringify(res)); this.$loading.close(); if (res["status"] == "D") { this.$store.commit("set_variables", { logined: true, empName: res["data"]["userFullName"], empCode: res["data"]["userName"], userType: res["data"]["userType"], haveInfo: res["status"] == "D", unnormalTip: false, // userId: res["userId"], // photoUrl: res['data']['photoUrl'], // department: res['data']['department'], // job: res['data']['job'], authCode: code, status: res.data.status, isadmin: res.data.isadmin, positionList: res.data.positionList, menuResponsibilityList: res.data.menuResponsibilityList, userFullName: res.data.userFullName, userName: res.data.userName, userId: res.data.userId, operationOrgIds: res.data.operationOrgIds, domain: res.data.domain, useTrype: res.data.useTrype, platformCode: res.data.platformCode, responsibilityId: res.data.responsibilityId, // havePower: res["userType"] != "PUGUIDE", }); this.$store.commit("cart/getShoppingCartNum"); } else { const authCode = await getCode(corpId); if ( res.msg.indexOf("没有找到对应的导购档案") > -1 || res.msg.indexOf("该用户不存在") > -1 ) { this.$store.commit("set_variables", { logined: true, haveInfo: false, authCode, unnormalTip: false, }); } else { this.$store.commit("set_variables", { logined: true, haveInfo: false, authCode, unnormalTip: true, }); } } }) .catch((err) => { this.$loading.close(); alert("获取用户资料失败" + JSON.stringify(err)); this.$store.commit("set_variables", { logined: false, }); if (isFirst) { this.getUser(false); return; } this.$toast("登录失败,请刷新"); }); }, localLogin() { this.$loading.open("登陆中"); this.$store.commit("set_variables", { logined: false, empName: "张三", empCode: "473436", department: "IT管理部", job: "软件开发工程师", userType: 3, haveInfo: false, unnormalTip: false, }); setTimeout(() => { this.$loading.close(); const obj = { isadmin: "N", platformCode: "PUGUIDE", responsibilityId: 390064, userName: "DG00045", operationOrgIds: 1865, userFullName: "帆帆", userType: "PUGUIDE", userId: 1865, unnormalTip: false, }; this.$store.commit("set_variables", { ...obj, logined: true, empName: "张三", empCode: "473436", department: "IT管理部", job: "软件开发工程师", // userType: 3, // havePower: true, status: "n", haveInfo: true, pugCode: "DG00045", authCode: "09aa87054db5346ab8421d8ec15e0d54", }); this.$store.commit("cart/getShoppingCartNum"); // this.$store.commit("cart/getCartList", { // params: `{"varIsadmin":"N","varPlatformCode":"PUGUIDE","operationRespId":390064,"varUserName":"DG00002","operatorUserId":1865,"varUserFullName":"帆帆","varUserType":"PUGUIDE","varUserId":1865,"userCode":"DG00002"}`, // pageIndex: 1, // pageRow: 5, // }); const cartParams = this.isLocal ? this.localUser : { userCode: this.userName }; this.$store.commit("cart/getCartList", { params: JSON.stringify(cartParams), pageIndex: 1, pageRow: 5, }); }); }, login() { const env = this.env; if (!env) { this.localLogin(); } else { this.getUser(true); } }, }, created() { // console.log(this.$store); this.login(); },一、 关于钉钉登录:
根据需要来选择是否鉴权,免登不需要鉴权,拨打钉钉用户电话需要鉴权,查看钉钉用户信息需要VIP鉴权(并且需要公司交钱给钉钉–例如每年50万);corpId尽量从后获取,尽量不要写在前端本地代码(前端代码可以从客户端下载,会造成corpId泄露);关于公共数据:为了减少http请求数量,酌情在本地储存保存备份;