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 钉钉扫码登录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电销机器人价格_供应商电话销售机器人服务
- 下一篇: 初学者先学python语音好吗_献给Py