python网页登录钉钉_django 钉钉扫码登录
django 钉钉登录
原理
先去获取钉钉用户信息,获取之后 去django User里面 查询 是否存在,不存在就创建,存在就正常登录。
根据唯一ID 进行判断
登录图
钉钉部分
请参考如下链接
django部分
login页面
url 是 登录请求处理页面
appid 是 钉钉 id
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,例如
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);
}
views.py
appId 和 appSecret 是 钉钉信息
import requests
import random
def 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'] = True
login_ip = request.META['REMOTE_ADDR']
LoginLogs.objects.create(user=request.user, ip=login_ip)
return redirect('/index.html')
python网页登录钉钉_django 钉钉扫码登录相关推荐
- 钉钉授权第三方WEB网站扫码登录
一.阅读开发文档 首先阅读钉钉官方的开发文档,扫码登录其实用的是官方文档描述的第二种方式,即将钉钉登录二维码内嵌到自己页面中,用户使用钉钉扫码登录第三方网站,网站可以拿到钉钉的用户信息. 二.准备工作 ...
- IM要做手机扫码登录?先看看微信的扫码登录功能技术原理
本文原文由作者Amazing10原创发布于公众号业余码农,收录时有改动,感谢原作者的技术分享. 1.引言 某天中午,吃完午饭,摊在自己的躺椅上,想趁吃饱喝足的午后时间静静享受独自的静谧. 干点什么好呢 ...
- spring boot 自动跳转登录页面_徒手撸一个扫码登录示例工程
徒手撸一个扫码登录示例工程 不知道是不是微信的原因,现在出现扫码登录的场景越来越多了,作为一个有追求.有理想新四好码农,当然得紧跟时代的潮流,得徒手撸一个以儆效尤 本篇示例工程,主要用到以下技术栈 q ...
- Vue - 实现微信扫码登录功能(项目植入微信扫码登录功能)超详细完整流程详解及详细代码及注释,附带完整功能源码、常见问题解决方案
前言 如果您需要 Nuxt.js 版本的教程,请访问 Nuxt.js - 微信扫码登录功能. 网上的大部分教程都太乱且没有任何注释和解释,对于新手而言简直是根本无从下手, 本文将站在新手小白的角度,从 ...
- 利用公众号实现网页扫码登录
公众号因为有测试号,所以测试起来蛮方便的. 1.先熟悉微信公众号开发文档. 2.首先网页端需要生成临时二维码 例如:https://mp.weixin.qq.com/cgi-bin/showqrcod ...
- 利用Python实现MOOC扫码登录
利用Python实现MOOC扫码登录 1.基本原理 访问网站扫码登录页,网站给浏览器返回一个二维码和一个唯一标志KEY 浏览器开启定时轮询服务器,确认KEY对应的扫码结果 用户使用app扫码二维码,a ...
- vue 微信扫码登录嵌入方式及开发踩的坑点
文章目录 1. 微信扫码登录开发文档 申请AppID,AppSecret,配置回调地址 2. 微信扫码登录方式 3. 微信扫码登录代码 4. 使用 href 更改内嵌的样式 5. 坑点1:redire ...
- 面试官:hold住了八股和算法,扫码登录应该怎么实现你总不会了吧
真实面试小场景: 经过八股和算法的交锋,老三松了口气,都hold住了.只见面试官微微一笑,"其实,我真正想问的是--你觉得扫码登录应该怎么实现." 老三:"啊--这个,哦 ...
- 手游扫码登录神器教程
什么是"扫码登录手游"简单来说,就是不用对方的微信账号密码,直接让对方扫一扫二维码,即可使用对方的账号登录游戏或者应用程序. 你是否为了这个怎么扫码登录游戏不会而烦恼?每次朋友 ...
- springboot实现微信扫码登录和绑定
前言:系统中若用到微信扫码登录,则要进行微信公众账号授权,所以在开发功能之前, 需要到微信公众平台申请一个服务号,当然仅仅只是作为开发者,则使用测试公众账号也行. 有了公众号后,则需登录公众后台进行一 ...
最新文章
- java基础语法学习
- Spring Cloud Alibaba - 24 Gateway-路由、断言(Predicate)、过滤器(Filter)初体验
- Java读写二进制文件
- 项目启动,数据库连接错误:SQLNonTransientConnectionException: Could not create connection to database server
- 大三软件工程小项目-小技术集合-tcp服务器搭建及客户端
- 网站链接跳转安全警告提示l单页源码
- 【es】ClassNotFoundException: org.elasticsearch.plugins.ExtendedPluginsClassLoader
- ffmpeg.c(ffmpeg.exe)调试笔记一
- matlab注释的方法
- Python训练文本情感分析模型
- FileZilla Server连接服务器失败
- 2021大学网课答案搜题公众号
- chromecast 协议_如何设置新的Chromecast
- 低电平译码器LS138设计
- POJ 1392 Ouroboros Snake 欧拉回路
- mysql 高并发 响应时间_高并发,你真的了解吗?
- 2023 软件库APP下载系统源码 附卡密会员插件
- Android8.0 核心app或者service crash多次会进入Recovery
- 随心测试_Python Se_005鼠标悬停操作
- PHP 重启 php-fpm 的几种方法