钉钉扫码第三方登录

news/2024/7/3 4:14:17

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

主要的逻辑流程:

 

二话不说,上代码(由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去实现的,这里做了登录的接口实现。


http://www.niftyadmin.cn/n/2813909.html

相关文章

钉钉python的sdk应用

python通过钉钉接口获取钉钉企业的信息。 1. 安装钉钉sdk pip install dingtalk-sdk 2. 在钉钉的开发者平台配置开发者权限,拿到corpId和secret CORP_ID XXXXXXXXXXXXXXXXXXXX SECRET XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 3. 连接 f…

react的使用方法

creatReactApp 1、全局安装 npm install -g create-reate-react-app2、创建react应用 create-react-app react-demo3、进入项目目录 cd react-demo4、下载项目依赖 npm install5、启动项目 npm start6、 显示项目配置 npm run eject创建完项目之后 npm 和yarn都可以加载缓存文…

学习react——django和react的登录,注册

自学react,作为一个只有后端python方面知识的人,看过一点点前端教程基础,学习react还是不轻松的。 记过两天的学习,自制一个简单的登录,注册界面,组件的划分用的还不是熟悉。 登录界面:http:/…

react中子向父传参

父组件 render(){<Tablebox callback{this.changeIndex.bind(this)}/> } changeIndex(index){console.log(index) }子组件 Tablebox render(){let {callback}this.props;return <div classNametableboxonMouseEnter{()>{callback(凌晨两点半)}}></div>}

钉钉python实现审批(通过软件和钉钉审批流的结合)

为了实现工单系统&#xff0c;又不想自己去结合钉钉的组织架构实现一套审批流&#xff0c;所以采用钉钉的审批结合自己的系统去实现工单。 由钉钉实现审批流&#xff0c;软件实现查询&#xff0c;记录工单等。 一、具体流程 二、具体的实现方式 获取token的函数 def getTok…

跨组件传参 react

const Context React.createContext();// console.log(Context.Provider);// 提供者// console.log(Context.Consumer);//使用者//孙子class Son extends React.Component{render(){return <div className"son"><Context.Consumer>{(data)>{return &…

k8s之pod基础(下)

1.2 镜像拉取的策略 IfNotPresent 只有当镜像在本地不存在时才会拉取。&#xff08;先对本地进行排查&#xff0c;本地有该镜像直接使用&#xff0c;本地没有该镜像则选择在仓库中拉取&#xff09; Always 总是从仓库拉取镜像&#xff0c;无论本地是否存在镜像&#xff08…

钉钉python实现审批数据库设计

为了实现工单系统&#xff0c;又不想自己去结合钉钉的组织架构实现一套审批流&#xff0c;所以采用钉钉的审批结合自己的系统去实现工单。 由钉钉实现审批流&#xff0c;软件实现查询&#xff0c;记录工单等。 在上一篇中已经实现了审批流程以及回调函数的实现和整个工单的逻…