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查找用户,返回用户信息。至此,微应用免登就实现完毕,是不是很简单呢。觉得简单就点个赞留个言吧,有问题欢迎联系笔者共同探讨。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
专有钉钉免登配置nginx的具体步骤如下: 1. 在nginx配置文件中添加一个server块,指定监听的端口和域名: ``` server { listen 80; server_name your_domain.com; } ``` 2. 在server块中添加location块,配置反向代理到专有钉钉免登的服务地址: ``` server { listen 80; server_name your_domain.com; location / { proxy_pass http://your_dingtalk_server_ip:your_dingtalk_server_port; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` 其中,your_dingtalk_server_ip是专有钉钉免登服务的IP地址,your_dingtalk_server_port是服务监听的端口。 3. 保存配置文件并重启nginx服务,使配置生效。 这样,当用户访问your_domain.com时,nginx会将请求转发到专有钉钉免登服务,实现免登功能。 请注意,以上步骤是基于nginx的配置,具体配置方式可能会因实际情况而有所不同,请根据实际需求进行相应的配置调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [阿里专有钉钉前端面试指南](https://blog.csdn.net/u012384510/article/details/118981653)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [钉钉扫码免登-钉钉应用免登实现(附仓库及Demo)](https://blog.csdn.net/weixin_43558927/article/details/129772974)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值