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 钉钉扫码登录相关推荐

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

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

  2. IM要做手机扫码登录?先看看微信的扫码登录功能技术原理

    本文原文由作者Amazing10原创发布于公众号业余码农,收录时有改动,感谢原作者的技术分享. 1.引言 某天中午,吃完午饭,摊在自己的躺椅上,想趁吃饱喝足的午后时间静静享受独自的静谧. 干点什么好呢 ...

  3. spring boot 自动跳转登录页面_徒手撸一个扫码登录示例工程

    徒手撸一个扫码登录示例工程 不知道是不是微信的原因,现在出现扫码登录的场景越来越多了,作为一个有追求.有理想新四好码农,当然得紧跟时代的潮流,得徒手撸一个以儆效尤 本篇示例工程,主要用到以下技术栈 q ...

  4. Vue - 实现微信扫码登录功能(项目植入微信扫码登录功能)超详细完整流程详解及详细代码及注释,附带完整功能源码、常见问题解决方案

    前言 如果您需要 Nuxt.js 版本的教程,请访问 Nuxt.js - 微信扫码登录功能. 网上的大部分教程都太乱且没有任何注释和解释,对于新手而言简直是根本无从下手, 本文将站在新手小白的角度,从 ...

  5. 利用公众号实现网页扫码登录

    公众号因为有测试号,所以测试起来蛮方便的. 1.先熟悉微信公众号开发文档. 2.首先网页端需要生成临时二维码 例如:https://mp.weixin.qq.com/cgi-bin/showqrcod ...

  6. 利用Python实现MOOC扫码登录

    利用Python实现MOOC扫码登录 1.基本原理 访问网站扫码登录页,网站给浏览器返回一个二维码和一个唯一标志KEY 浏览器开启定时轮询服务器,确认KEY对应的扫码结果 用户使用app扫码二维码,a ...

  7. vue 微信扫码登录嵌入方式及开发踩的坑点

    文章目录 1. 微信扫码登录开发文档 申请AppID,AppSecret,配置回调地址 2. 微信扫码登录方式 3. 微信扫码登录代码 4. 使用 href 更改内嵌的样式 5. 坑点1:redire ...

  8. 面试官:hold住了八股和算法,扫码登录应该怎么实现你总不会了吧

    真实面试小场景: 经过八股和算法的交锋,老三松了口气,都hold住了.只见面试官微微一笑,"其实,我真正想问的是--你觉得扫码登录应该怎么实现." 老三:"啊--这个,哦 ...

  9. 手游扫码登录神器教程

    ​ 什么是"扫码登录手游"简单来说,就是不用对方的微信账号密码,直接让对方扫一扫二维码,即可使用对方的账号登录游戏或者应用程序. 你是否为了这个怎么扫码登录游戏不会而烦恼?每次朋友 ...

  10. springboot实现微信扫码登录和绑定

    前言:系统中若用到微信扫码登录,则要进行微信公众账号授权,所以在开发功能之前, 需要到微信公众平台申请一个服务号,当然仅仅只是作为开发者,则使用测试公众账号也行. 有了公众号后,则需登录公众后台进行一 ...

最新文章

  1. java基础语法学习
  2. Spring Cloud Alibaba - 24 Gateway-路由、断言(Predicate)、过滤器(Filter)初体验
  3. Java读写二进制文件
  4. 项目启动,数据库连接错误:SQLNonTransientConnectionException: Could not create connection to database server
  5. 大三软件工程小项目-小技术集合-tcp服务器搭建及客户端
  6. 网站链接跳转安全警告提示l单页源码
  7. 【es】ClassNotFoundException: org.elasticsearch.plugins.ExtendedPluginsClassLoader
  8. ffmpeg.c(ffmpeg.exe)调试笔记一
  9. matlab注释的方法
  10. Python训练文本情感分析模型
  11. FileZilla Server连接服务器失败
  12. 2021大学网课答案搜题公众号
  13. chromecast 协议_如何设置新的Chromecast
  14. 低电平译码器LS138设计
  15. POJ 1392 Ouroboros Snake 欧拉回路
  16. mysql 高并发 响应时间_高并发,你真的了解吗?
  17. 2023 软件库APP下载系统源码 附卡密会员插件
  18. Android8.0 核心app或者service crash多次会进入Recovery
  19. 随心测试_Python Se_005鼠标悬停操作
  20. PHP 重启 php-fpm 的几种方法

热门文章

  1. Docker中的网络问题
  2. MySQL数据库的优化
  3. Android锁机样本分析
  4. 【技术原创】MailEnable开发指南
  5. 由PLC未授权访问引发的工程重置漏洞
  6. crackMe的逆向分析
  7. IOS(objective-c)实现md5加密(32位小写)的工具类
  8. 用vector写结构体
  9. Spring boot的Restful风格CRUD
  10. MySQL普通用户修改密码