django 钉钉扫码登录
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 钉钉扫码登录相关推荐
- 钉钉开发系列(十一)钉钉网页扫码登录
在<钉钉开发系列(八)二维码扫描登录的实现>介绍了一种扫码登录的方式,该方式是自己产生二维码,二维码中的URL指到自身的服务器页面,在该页面中以JSSDK的方式来获取钉钉用户的信息.钉钉官 ...
- 钉钉扫码登录cs架构,winform设计钉钉扫码客户端
先上效果图 下面开始流程: 准备工作 你需要一个注册钉钉的账号,以获取APPID: 你还需要你要登录的第三方网站的网址,以及一张网站logo图片的地址: 具体步骤: 1.注册成功后,登录,进行如下四步 ...
- python钉钉扫码登录程序_使用python+django集成钉钉三方扫码登陆
使用python+django集成钉钉三方扫码登陆 \(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\) 1. 进入钉钉开放平台--->点击左下角 ...
- 钉钉扫码登录第三方_在钉钉发布公司重要文件,真的安全吗?
钉钉以疫情在家办公为契机,加上"幸运地"被教育部"选中",在2月5日,钉钉下载量首次超过微信,跃居苹果App Store排行榜第一,并打破App Store记录 ...
- 钉钉授权第三方WEB网站扫码登录
一.阅读开发文档 首先阅读钉钉官方的开发文档,扫码登录其实用的是官方文档描述的第二种方式,即将钉钉登录二维码内嵌到自己页面中,用户使用钉钉扫码登录第三方网站,网站可以拿到钉钉的用户信息. 二.准备工作 ...
- 钉钉扫码登录第三方_e签宝联合钉钉升级产品功能,共建企业服务生态闭环
钉钉微应用更新了,e签宝助力升级.互联网时代下,传统模式的"稳定"已然成为历史,客户的需求在不断变化,我们创新的脚步也从未停止. e签宝携手钉钉,双方着力共建开放.共生.多赢的企业 ...
- 钉钉扫码登录二维码错乱
今天有一个小伙伴,打开钉钉扫码登录页面,二维码是裂开的. 调查发现其他浏览器都可以,只有Chrome浏览器不行. 初步怀疑是浏览器内核原因. 解决方案: 兼容IE内核
- python钉钉扫码登录程序_钉钉扫码登录网站(两种方式实现)
钉钉扫码登录网站(两种方式实现) 效果: 动手敲代码! 第一步,钉钉后台配置 点击进入钉钉开发者平台 的页面,点击左侧菜单的[移动接入应用-登录],然后点击右上角的[创建扫码登录应用授权],创建用于免 ...
- 使用第三方账号认证(一):钉钉扫码登录
一.需求 要使用钉钉扫码登录,也就是需要把kintone的登录画面替换成扫码画面. 而在扫码后,则需要获取钉钉用户的身份信息并将其转化为对应的kintone用户. 最后服务端生成相应的session, ...
- Spring Boot 接入钉钉扫码登录
公司如果有在使用钉钉,向企业管理员申请一个开发者权限. 如果觉得麻烦,可以自己去钉钉平台注册一个企业,不需要认证的. 创建第三方授权应用 1. 选择 工作台 tab 页 2. 拉取至末尾,选择自建应用 ...
最新文章
- ROW_NUMBER() OVER 函数的用法
- HUST 1588 辗转数对
- 智能音箱自己把自己黑了:随机购物拨号,自主开灯关门,平均成功率达88%
- 一起谈.NET技术,Silverlight 游戏开发小技巧:动感小菜单
- Netty学习笔记(三)EventLoopGroup开篇
- 【1】MySQL的四种事务隔离级别
- 95-908-030-源码-FlinkTable-Table API
- openstack创建的实例不能使用ssh登录
- 【C++】【GADL】读取栅格数据获取信息
- android 转场动画 共享元素,Android-Animation-Set
- 写论文与PPT汇报时matlab图片的背景透明处理
- Wind Python案例
- GitHub代理设置
- linux如何停止命令运行,linux的停止命令
- python中的与或非详解
- 织梦后台编写网站的操作步骤
- 【中国剩余定理】互素与不互素的情况详解
- 鸟与虫(四)pexels搜到的我都想要,
- SAP PP相关函数
- 内网安装视频会议软件有几个步骤?
热门文章
- arch linux 时间,System time (简体中文)
- Spring框架的xml出错Cannot resolve reference to bean txPointcut while setting bean property pointcut
- linux as5 启动mysql_RedHat AS5 PHP添加JSON模块
- 20190810:存在重复(三种解法)
- js导出变量 vue_vue.js前端实现excel表格导出和获取headers里的信息
- c语言中{的作用,C语言中Static和Const关键字的作用
- java ztree json_java 树形转换JSON 工具类 / 树形子父级菜单递归 JSON 格式
- An attempt by a client to checkout a Connectio n has timed out报错解决
- linux下tar gz bz2 tgz z等众多压缩文件的解压方法
- JAV虚拟机下载 JDK1.6下载大全