|
发表于 2019-12-27 09:31:20
|
显示全部楼层
我最近做了个小项目,应用集成到钉钉中,钉钉中直接打开应用,并单点登录到这个应用系统。实现的机制是:钉钉打开应用的接入页index.html时,index.html中的js调用钉钉的api取得code,代码如下:
<script>
_config = {};
_config.corpId = "dingabed4ac9486bb4e335c2f4657eb6378f";
dd.ready(function() {
dd.runtime.permission.requestAuthCode({
corpId : _config.corpId, // 企业id
onSuccess : function(info) {
code = info.code // 通过该免登授权码可以获取用户身份
getUser(code);
},
onFail : function(err) {
}
});
});
function getUser(code) {
$.ajax({
method : "post",
async : false,
contentType : "application/json; charset=utf-8",
dataType : "json",
url : "/ding/service/user",
data : JSON.stringify({
code : code
}),
success : function(response) {
// alert(JSON.stringify(response.data.user.name));
// window.location.replace(response.data.url);
if(response.data.user&&response.data.user.name){
account = response.data.user.name;
loginEisoo(account);
}else{
return;
}
}
});
}
function loginEisoo(account){
var url = "http://192.168.252.8:9001/ding/service/eisoo/login";
$.ajax({
method : "post",
async : false,
contentType : "application/json; charset=utf-8",
dataType : "json",
url : url,
data : JSON.stringify({
account : account
}),
success : function(response) {
var userid = response.data.userid;
var tokenid = response.data.tokenid;
loadEisoo(userid,tokenid);
},
error : function(jqXHR, textStatus, errorThrown){
alert(errorThrown);
}
});
}
function loadEisoo(userid,tokenid){
var url = "http://192.168.202.241/login?userid="+userid+"&tokenid="+tokenid;
location.href = url;
dd.biz.navigation.replace({
url : url,//要打开链接的地址
onSuccess : function(result) {
},
onFail : function(err) {
location.href = url;
}
});
}
</script>
这里注意:getUser函数调用后台服务,后台服务做两件事,1、用code参数访问钉钉取得钉钉中的用户信息,然后通过应用系统与钉钉用户的对应关系,确定用户id,对用户进行单点登录,返回id和tokenid(对bex5来说,返回bsessionid),loadEisoo函数重定向url,并传入id和tokenid(对bex5来说,传入bsessionid),实现免登录打开应用。
不知道对楼主有没有帮助?
|
|