django 钉钉登录

原理

先去获取钉钉用户信息,获取之后 去django User里面 查询 是否存在,不存在就创建,存在就正常登录。
根据唯一ID 进行判断

登录图

钉钉部分

请参考如下链接

https://open-doc.dingtalk.com/microapp/serverapi2/kymkv6

django部分

login页面

url 是 登录请求处理页面
appid 是 钉钉 id

<div id="login_container"></div><script src="http://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script>
<script>var url = encodeURIComponent('http://www.hequan.lol/login-dingding.html');var goto = encodeURIComponent('https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=xxxxxxxxxxxxxxxxxxxxxxxx&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=' + url)var obj = DDLogin({id: "login_container",//这里需要你在自己的页面定义一个HTML标签并设置id,例如<div id="login_container"></div>或<span id="login_container"></span>goto: goto, style: "border:none;background-color:#FFFFFF;",width: "300",height: "400"});var hanndleMessage = function (event) {var origin = event.origin;console.log("origin", event.origin);if (origin == "https://login.dingtalk.com") { //判断是否来自ddLogin扫码事件。var loginTmpCode = event.data; //拿到loginTmpCode后就可以在这里构造跳转链接进行跳转了console.log("loginTmpCode", loginTmpCode);var url2 = "https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=xxxxxxxxxxxxxxxxxxxxxxxx&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=" + url + "&loginTmpCode=" + loginTmpCode;window.location.href = url2;}};if (typeof window.addEventListener != 'undefined') {window.addEventListener('message', hanndleMessage, false);} else if (typeof window.attachEvent != 'undefined') {window.attachEvent('onmessage', hanndleMessage);}</script>

views.py

appId 和 appSecret 是 钉钉信息

import requests
import randomdef login_dingding(request):if request.method == "GET":code = request.GET.get('code', )state = request.GET.get('state', )appId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'appSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'token = requests.get(f'https://oapi.dingtalk.com/sns/gettoken?appid={appId}&appsecret={appSecret}')access_token = token.json()["access_token"]tmp_auth_code = requests.post(f"https://oapi.dingtalk.com/sns/get_persistent_code?access_token={access_token}",json={"tmp_auth_code": code})tmp_code = tmp_auth_code.json()print(tmp_code)openid = tmp_code['openid']persistent_code = tmp_code['persistent_code']sns_token_request = requests.post(f"https://oapi.dingtalk.com/sns/get_sns_token?access_token={access_token}",json={"openid": openid,"persistent_code": persistent_code})sns_token = sns_token_request.json()['sns_token']user_info_request = requests.get(f'https://oapi.dingtalk.com/sns/getuserinfo?sns_token={sns_token}')user_info = user_info_request.json()['user_info']print(user_info)try:user = User.objects.get(first_name=user_info['unionid'])except Exception as e:password = f'hequan{random.randint(1000,9999)}'try:user = User.objects.create(username=user_info['nick'], password=password,first_name=user_info['unionid'])except Exception as e:user = User.objects.create(username=f"{user_info['nick']}{random.randint(0,9999)}", password=password,first_name=user_info['unionid'])finally:login(request, user)request.session['is_login'] = Truelogin_ip = request.META['REMOTE_ADDR']LoginLogs.objects.create(user=request.user, ip=login_ip)return redirect('/index.html')

转载于:https://blog.51cto.com/hequan/2304690

django 钉钉扫码登录相关推荐

  1. 钉钉开发系列(十一)钉钉网页扫码登录

    在<钉钉开发系列(八)二维码扫描登录的实现>介绍了一种扫码登录的方式,该方式是自己产生二维码,二维码中的URL指到自身的服务器页面,在该页面中以JSSDK的方式来获取钉钉用户的信息.钉钉官 ...

  2. 钉钉扫码登录cs架构,winform设计钉钉扫码客户端

    先上效果图 下面开始流程: 准备工作 你需要一个注册钉钉的账号,以获取APPID: 你还需要你要登录的第三方网站的网址,以及一张网站logo图片的地址: 具体步骤: 1.注册成功后,登录,进行如下四步 ...

  3. python钉钉扫码登录程序_使用python+django集成钉钉三方扫码登陆

    使用python+django集成钉钉三方扫码登陆 \(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\) 1. 进入钉钉开放平台--->点击左下角 ...

  4. 钉钉扫码登录第三方_在钉钉发布公司重要文件,真的安全吗?

    钉钉以疫情在家办公为契机,加上"幸运地"被教育部"选中",在2月5日,钉钉下载量首次超过微信,跃居苹果App Store排行榜第一,并打破App Store记录 ...

  5. 钉钉授权第三方WEB网站扫码登录

    一.阅读开发文档 首先阅读钉钉官方的开发文档,扫码登录其实用的是官方文档描述的第二种方式,即将钉钉登录二维码内嵌到自己页面中,用户使用钉钉扫码登录第三方网站,网站可以拿到钉钉的用户信息. 二.准备工作 ...

  6. 钉钉扫码登录第三方_e签宝联合钉钉升级产品功能,共建企业服务生态闭环

    钉钉微应用更新了,e签宝助力升级.互联网时代下,传统模式的"稳定"已然成为历史,客户的需求在不断变化,我们创新的脚步也从未停止. e签宝携手钉钉,双方着力共建开放.共生.多赢的企业 ...

  7. 钉钉扫码登录二维码错乱

    今天有一个小伙伴,打开钉钉扫码登录页面,二维码是裂开的. 调查发现其他浏览器都可以,只有Chrome浏览器不行. 初步怀疑是浏览器内核原因. 解决方案: 兼容IE内核

  8. python钉钉扫码登录程序_钉钉扫码登录网站(两种方式实现)

    钉钉扫码登录网站(两种方式实现) 效果: 动手敲代码! 第一步,钉钉后台配置 点击进入钉钉开发者平台 的页面,点击左侧菜单的[移动接入应用-登录],然后点击右上角的[创建扫码登录应用授权],创建用于免 ...

  9. 使用第三方账号认证(一):钉钉扫码登录

    一.需求 要使用钉钉扫码登录,也就是需要把kintone的登录画面替换成扫码画面. 而在扫码后,则需要获取钉钉用户的身份信息并将其转化为对应的kintone用户. 最后服务端生成相应的session, ...

  10. Spring Boot 接入钉钉扫码登录

    公司如果有在使用钉钉,向企业管理员申请一个开发者权限. 如果觉得麻烦,可以自己去钉钉平台注册一个企业,不需要认证的. 创建第三方授权应用 1. 选择 工作台 tab 页 2. 拉取至末尾,选择自建应用 ...

最新文章

  1. ROW_NUMBER() OVER 函数的用法
  2. HUST 1588 辗转数对
  3. 智能音箱自己把自己黑了:随机购物拨号,自主开灯关门,平均成功率达88%
  4. 一起谈.NET技术,Silverlight 游戏开发小技巧:动感小菜单
  5. Netty学习笔记(三)EventLoopGroup开篇
  6. 【1】MySQL的四种事务隔离级别
  7. 95-908-030-源码-FlinkTable-Table API
  8. openstack创建的实例不能使用ssh登录
  9. 【C++】【GADL】读取栅格数据获取信息
  10. android 转场动画 共享元素,Android-Animation-Set
  11. 写论文与PPT汇报时matlab图片的背景透明处理
  12. Wind Python案例
  13. GitHub代理设置
  14. linux如何停止命令运行,linux的停止命令
  15. python中的与或非详解
  16. 织梦后台编写网站的操作步骤
  17. 【中国剩余定理】互素与不互素的情况详解
  18. 鸟与虫(四)pexels搜到的我都想要,
  19. SAP PP相关函数
  20. 内网安装视频会议软件有几个步骤?

热门文章

  1. arch linux 时间,System time (简体中文)
  2. Spring框架的xml出错Cannot resolve reference to bean txPointcut while setting bean property pointcut
  3. linux as5 启动mysql_RedHat AS5 PHP添加JSON模块
  4. 20190810:存在重复(三种解法)
  5. js导出变量 vue_vue.js前端实现excel表格导出和获取headers里的信息
  6. c语言中{的作用,C语言中Static和Const关键字的作用
  7. java ztree json_java 树形转换JSON 工具类 / 树形子父级菜单递归 JSON 格式
  8. An attempt by a client to checkout a Connectio n has timed out报错解决
  9. linux下tar gz bz2 tgz z等众多压缩文件的解压方法
  10. JAV虚拟机下载 JDK1.6下载大全