日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python网页登录钉钉_django 钉钉扫码登录

發布時間:2025/3/20 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 钉钉扫码登录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。