钉钉扫码第三方登录

介于公司内部软件需要做钉钉统一登录。

主要的逻辑流程:

 

二话不说,上代码(由python去实现)

URL_ACCESS_TOKEN = 'https://oapi.dingtalk.com/sns/gettoken?appid=XXXXXXXXXXXXXXX&appsecret=XXXXXXXXXXXXXXXXXXXX'
URL_TMP_AUTH_CODE = 'https://oapi.dingtalk.com/sns/get_persistent_code?access_token='
def login(request):
    
    body = json.loads(request.body.decode())

    #获取前端传入的参数dingcode
    ding_code = body.get('ding_code')
    if not ding_code:
        return Response(data={'code': -1, 'msg': '传入正确的参数。', 'data': {}}, status=401)

    #URL_ACCESS_TOKEN获取token的url,获取token
    res = requests.get(URL_ACCESS_TOKEN)
    data = {
        'tmp_auth_code': ding_code,
    }
    headers = {
        'Content-Type': 'application/json',
    }
    url_tmp_auth_code = URL_TMP_AUTH_CODE + json.loads(
        res.text).get('access_token')

    #url_tmp_auth_code钉钉获取用户unionid的接口,通过token和dingcode
    req = requests.post(url_tmp_auth_code, headers=headers, json=dict(data))
    unionid = json.loads(req.text).get('unionid')
    print(unionid)

    try:
        #通过unionid去数据库中获取对应的用户信息
        user = Users.objects.get(unionid=unionid)
    except:
        return Response(data={'code': -1, 'msg': '用户没有登陆权限。', 'data': {}}, status=401)
    if user.is_active != 1:
        return Response(data={'code': -1, 'msg': '用户没有登陆权限。', 'data': {}}, status=401)
    
    #做登录操作
    login(request, user)
    print(request.user.unionid)
    request.session['is_login'] = True
    request.session['FS_YWPT'] = True
    request.session.set_expiry(0)
    return Response(data={'code': 1,'msg': '获取成功','data': {'username': user.username}})

 

python后端是有django去实现的,这里做了登录的接口实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值