vue+Django接入钉钉登录

tsx81428  金牌会员 | 2024-6-25 15:11:21 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 947|帖子 947|积分 2843

前端处理
  1. dingtalkLogin() {
  2.       let url = `https://login.dingtalk.com/oauth2/auth?redirect_uri=${this.dingRedirectUrl}&response_type=code&client_id=${this.appKey}&scope=openid&state=STATE&prompt=consent`
  3.       window.location.href = url;
  4.     },
复制代码
后端处理
  1. def dingtalk_auth(request):
  2.     try:
  3.         code = request.GET['code']
  4.         logger.info('钉钉临时授权码获取 ----{}'.format(code))
  5.         token = get_user_token(code)  # oauth2/userAccessToken
  6.         
  7.         logger.info('根据钉钉临时授权码获取token ----{}'.format(token))
  8.         user_resp = get_user_info(token)  # /contact/users/{}
  9.         logger.info('根据获取用户信息 ----{}'.format(user_resp))
  10.         user = User.objects.filter(username=user_resp['mobile']).first()
  11.         if user:
  12.             user.email = user_resp.get('email', '')
  13.             user.save()
  14.         else:
  15.             params = {
  16.                 'username': user_resp.get('mobile'),
  17.                 'first_name': user_resp.get('nick'),
  18.                 'dingtalk_name': user_resp.get('nick'),
  19.                 'dingtalk_avatar': user_resp.get('avatarUrl'),
  20.                 'mobile_phone': user_resp.get('mobile'),
  21.                 'email': user_resp.get('email'),
  22.                 'is_superuser': False
  23.             }
  24.             user = User.objects.create(**params)
  25.         logger.info('根据用户信息 ----{}'.format(user.username))
  26.         if not user.is_staff:
  27.             print("----校验用户登录权限{}----".format(user.is_staff))
  28.             return JsonResponse(
  29.                 {'code': 204, "msg": '请确认您是否有此网站的登录权限'})
  30.         refresh = RefreshToken.for_user(user)
  31.        # 生成一个Django自己的token
  32.         result = {'code': 200, "username": user.username, "token": str(refresh.access_token)}
  33.         print("----校验用户获取返回值为{}----".format(result))
  34.         return JsonResponse(result)
  35.     except Exception as e:
  36.         print(e)
  37.         print(traceback.format_exc())
  38.         logger.info('钉钉登录报错 ----{}'.format(traceback.format_exc()))
  39.         return JsonResponse({'code': 400, 'errmsg': str(e)})
复制代码
参考
https://developer.aliyun.com/article/1488636
https://open.dingtalk.com/document/orgapp-server/use-dingtalk-account-to-log-on-to-third-party-websites-1?spm=a2c6h.12873639.article-detail.7.5d622205VHxpO0#title-fre-oe4-zqn

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表