vue+Django接入钉钉登录

前端处理

复制代码
 dingtalkLogin() {
      let url = `https://login.dingtalk.com/oauth2/auth?redirect_uri=${this.dingRedirectUrl}&response_type=code&client_id=${this.appKey}&scope=openid&state=STATE&prompt=consent`
      window.location.href = url;
    },

后端处理

复制代码
def dingtalk_auth(request):
    try:
        code = request.GET['code']
        logger.info('钉钉临时授权码获取 ----{}'.format(code))

        token = get_user_token(code)  # oauth2/userAccessToken
        
        logger.info('根据钉钉临时授权码获取token ----{}'.format(token))
        user_resp = get_user_info(token)  # /contact/users/{}
        logger.info('根据获取用户信息 ----{}'.format(user_resp))

        user = User.objects.filter(username=user_resp['mobile']).first()

        if user:
            user.email = user_resp.get('email', '')
            user.save()
        else:
            params = {
                'username': user_resp.get('mobile'),
                'first_name': user_resp.get('nick'),
                'dingtalk_name': user_resp.get('nick'),
                'dingtalk_avatar': user_resp.get('avatarUrl'),
                'mobile_phone': user_resp.get('mobile'),
                'email': user_resp.get('email'),
                'is_superuser': False
            }
            user = User.objects.create(**params)

        logger.info('根据用户信息 ----{}'.format(user.username))
        if not user.is_staff:
            print("----校验用户登录权限{}----".format(user.is_staff))
            return JsonResponse(
                {'code': 204, "msg": '请确认您是否有此网站的登录权限'})
        refresh = RefreshToken.for_user(user)
       # 生成一个Django自己的token
        result = {'code': 200, "username": user.username, "token": str(refresh.access_token)}
        print("----校验用户获取返回值为{}----".format(result))

        return JsonResponse(result)
    except Exception as e:
        print(e)
        print(traceback.format_exc())
        logger.info('钉钉登录报错 ----{}'.format(traceback.format_exc()))

        return JsonResponse({'code': 400, 'errmsg': str(e)})

参考

https://developer.aliyun.com/article/1488636

https://open.dingtalk.com/document/orgapp-server/use-dingtalk-account-to-log-on-to-third-party-websites-1?spm=a2c6h.12873639.article-detail.7.5d622205VHxpO0#title-fre-oe4-zqn

相关推荐
持续前行12 小时前
vscode 中找settings.json 配置
前端·javascript·vue.js
JosieBook12 小时前
【Vue】11 Vue技术——Vue 中的事件处理详解
前端·javascript·vue.js
安逸点12 小时前
Vue项目中使用xlsx库解析Excel文件
vue.js
一只小阿乐12 小时前
vue 改变查询参数的值
前端·javascript·vue.js·路由·router·网文·未花中文网
小酒星小杜13 小时前
在AI时代下,技术人应该学会构建自己的反Demo地狱系统
前端·vue.js·ai编程
Code知行合壹13 小时前
Pinia入门
vue.js
今天也要晒太阳47313 小时前
element表单和vxe表单联动校验的实现
vue.js
内存不泄露14 小时前
二手物品交易平台
spring boot·小程序·django
luoluoal14 小时前
基于python的基于深度学习的车俩特征分析系(源码+文档)
python·mysql·django·毕业设计·源码
依赖_赖14 小时前
前端实现token无感刷新
前端·javascript·vue.js