php钉钉企业微应用免登demo,钉钉微应用免登实现
用戶在使用軟件應用的過程中,第一步往往都是登錄。輸入賬號密碼,進行登錄,登錄的目的就是讓應用識別張三是張三,而不是李四。相對應,如果能夠不用輸賬號密碼,應用就知道你是你,就叫做免登。
免登的源頭還是需要登錄的。業內企業內部登錄往往采用統一登錄中心SSO的方案,比如集成CAS。一個同一地址登錄,同一域名下采用識別cookie的方式解析用戶名。也就是,登錄了OA之后,訪問HR、郵箱等等,在關閉瀏覽器之前,不需要再次登錄。釘應用實現免登,本質上也是通過釘釘實現登錄。因為使用者已經輸入賬號密碼或者手機號驗證碼在釘釘實現了登錄,釘釘已經保存了用戶的信息。
具體實踐,實現釘應用免登可以分為下面幾個步驟。
1、釘應用用戶信息與釘釘通訊錄打通。比如用戶通過手機號實現關聯。
2、前端代碼,調用JSapi獲取免登授權碼。
3、后端代碼,調用服務端接口解析授權碼,實現登錄。
4、后端代碼,識別用戶后,實現登錄邏輯。
下面用后臺java代碼和前端vue代碼來實際說明。
通訊錄的同步忽略了,按照釘釘服務端接口能夠實現同步。我們直接看前端的獲取免登授權碼該如何獲取。
loginByCode(corpId) {
const _this= this;
console.log("requestAuthCode begin");
_this.dd.runtime.permission.requestAuthCode({
corpId: corpId,
onSuccess:function(result) {
console.log("requestAuthCode:" +result.code);
_this.httpUtils.appGet('/login/loginByCode?code=' + result.code).then(function(res) {
const user=res.data;
window.localStorage.setItem("user", JSON.stringify(user));
},function(r) {
_this.commonUtils.commonAlert(r.msg);
})
},
onFail:function(err) {
alert("客戶端-獲取免登授權碼失敗:" +JSON.stringify(err));
}
})
},
上面的代碼塊封裝了loginByCode的方法,其主要功能就是獲取授權碼,然后將授權碼傳到后臺,獲取用戶信息。關鍵的代碼就是
dd.runtime.permission.requestAuthCode
這一個函數需要傳入一個corpId作為參數,該參數在企業后臺能夠找到。獲取授權碼失敗,我們可以把錯誤信息彈框顯示出來。獲取成功,就可以請求后臺的接口拉取用戶信息。接下來看看后臺是如何實現的。
@GetMapping("loginByCode")
public UserVO list(@RequestParam String code) {
log.info(code);
UserInfoByCodeResponse response=userInfoByCodeRequest.get(code);returndingUserQueryService.getVOByUserId(response.getUserid());
}
上圖后端代碼展示了獲取用戶信息的順序,即先解析授權碼,得到用戶信息,然后再去匹配用戶信息,找到當前的用戶。這里簡化了登錄的業務步驟,如果有集成鑒權,這一塊是需要另寫代碼實現。接下來詳細了解下userInfoByCodeRequest做了什么。
private String userInfoUrl = "https://oapi.dingtalk.com/user/getuserinfo?access_token={accessToken}&code={code}";
public UserInfoByCodeResponse get(String code) {
Map param =tokenService.getTokenMap();
param.put("code",code);returnrequestUtils.getWithUrlParam(userInfoUrl, UserInfoByCodeResponse.class, param);
}
如圖所示,其實就是坐了個請求,請求URL關鍵標識為user/getuserinfo。釘釘會返回用戶數據給你。釘釘返回的數據會包含userid這一數據,通過這一數據在應用從釘釘通訊錄同步過來的數據中,即可定位到一位用戶,這也就是下面這行代碼做的事情。
dingUserQueryService.getVOByUserId(response.getUserid()
注意這行代碼是完全在應用內實現的,比如筆者這里就是去數據庫根據userid查找用戶,返回用戶信息。至此,微應用免登就實現完畢,是不是很簡單呢。覺得簡單就點個贊留個言吧,有問題歡迎聯系筆者共同探討。
總結
以上是生活随笔為你收集整理的php钉钉企业微应用免登demo,钉钉微应用免登实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于web项目引入jstl.jar包和s
- 下一篇: C语言:圆面积计算