钉钉扫码登录网站(两种方式实现)

效果:

动手敲代码!

第一步,钉钉后台配置

点击进入钉钉开发者平台 的页面,点击左侧菜单的【移动接入应用-登录】,然后点击右上角的【创建扫码登录应用授权】,创建用于免登过程中验证身份的appId及appSecret,创建后即可看到appId和appSecret。

这里因为我是本地开发,所以回调地址直接写:http://localhost:5000/Home/DingLogin

注意哦,回调地址后面是有使用的~

第二部 我们创建一个 ASP.NET Core Web项目

修改appsettings.json

修改appsettings.json,增加钉钉的配置信息:

"DingDing": {

"QrAppId": "QrAppId", //你的钉钉扫码登录AppId

"QrAppSecret": "QrAppSecret" //你的钉钉扫码登录AppSecret

}

创建完成修改Home控制器的Index页面其实就是钉钉官网文档的代码啦~:

@{

ViewData["Title"] = "Home Page";

}

Welcome

跳转登录

@section Scripts

{

/*

* 解释一下goto参数,参考以下例子:

* var url = encodeURIComponent('http://localhost.me/index.php?test=1&aa=2');

* var goto = encodeURIComponent('https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=appid&response_type=code&scope=snsapi_login&state=STATE&redirect_uri='+url)

*/

var url = "http://localhost:5000/Home/DingLogin";

var obj = DDLogin({

id: "login_container",//这里需要你在自己的页面定义一个HTML标签并设置id,例如

goto: encodeURIComponent('https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=appid&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=' + url), //请参考注释里的方式

style: "border:none;background-color:#FFFFFF;",

width: "365",

height: "400"

});

var handleMessage = 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);

window.location.href =

"https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=appid&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=REDIRECT_URI&loginTmpCode=" +

loginTmpCode;

}

};

if (typeof window.addEventListener != 'undefined') {

window.addEventListener('message', handleMessage, false);

} else if (typeof window.attachEvent != 'undefined') {

window.attachEvent('onmessage', handleMessage);

}

$("#JumpToLogin").click(function(){

window.location.href =

"https://oapi.dingtalk.com/connect/qrconnect?appid=appid&response_type=code&scope=snsapi_login&state=LoginDing&redirect_uri=http://localhost:5000/Home/DingLogin";

});

}

官网介绍了两种方式,Demo把两种方式都放到一个页面了。登录页面效果:

第三步 回调方法:

第一步的时候我们说回调地址是需要使用的,那么首先我们要有这个地址啊。

因为是Demo,就直接写在HomeController中了

public string DingLogin(string code, string state)

{

//state 是前端传入的,钉钉并不会修改,比如有多种登录方式的时候,一个登录方法判断登录方式可以进行不同的处理。

OapiSnsGetuserinfoBycodeResponse response = new OapiSnsGetuserinfoBycodeResponse();

try

{

string qrAppId= AppConfigurtaionHelper.Configuration["DingDing:QrAppId"];

string qrAppSecret = AppConfigurtaionHelper.Configuration["DingDing:QrAppSecret"];

if (string.IsNullOrWhiteSpace(qrAppId)||string.IsNullOrWhiteSpace(qrAppSecret))

{

throw new Exception("请先配置钉钉扫码登录信息!");

}

DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/sns/getuserinfo_bycode");

OapiSnsGetuserinfoBycodeRequest req = new OapiSnsGetuserinfoBycodeRequest();

req.TmpAuthCode = code;

response = client.Execute(req, qrAppId, qrAppSecret);

//获取到response后就可以进行自己的登录业务处理了

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

//此处省略一万行代码

}

catch (Exception e)

{

response.Errmsg = e.Message;

}

return response.Body;

}

登录结果

完成上述步骤后,我们就可以运行项目测试了,钉钉会给我们返回用户的nick、openid及unionid,那么,我们可以用这些信息,为所欲为了?

总结

之前过于钉钉扫码,总觉得是很高大上的东西(原谅我是个菜鸡),也没有去尝试。

今天看完文档后,用在项目上,然后写了这个Demo,因为我Github没找到合适的,可能是大家觉得简单都不用写了。

1024 节日快乐!

python钉钉扫码登录程序_钉钉扫码登录网站(两种方式实现)相关推荐

  1. 钉钉扫码登录网站(两种方式实现)

    钉钉扫码登录网站(两种方式实现) 效果: 源代码地址:https://github.com/jellydong/DingQrCodeLogin 动手敲代码! 第一步,钉钉后台配置 参考链接:获取app ...

  2. python命令行模式怎么输入_python获得命令行输入的参数的两种方式

    外部直接执行python文件时,我们有时需要获得命令行的参数6ok免费资源网 获得命令行参数的两种方式6ok免费资源网 1.通过sys.argv6ok免费资源网 sys.argv:获得一个参数列表,第 ...

  3. MAX31855电路和程序,实现SPI和软件模拟时序两种方式读取数据

    1. 概述 MAX31855为热电偶至数字输出转换器,内置14位模/数转换器(ADC).器件带有冷端补偿检测和修正.数字控制器.SPI兼容接口,以及相关的控制逻辑,在温度控制器.过程控制或监测系统中设 ...

  4. python井字棋如何判断输赢_井字棋判断输赢的两种方法

    //方法一 public static int IsSolved(int[,] b) { var c012 = new int[] { 0, 1, 2 }; var s = string.Join(& ...

  5. vue 如何将参数放到连接上_通过Vue路由传参的两种方式及Vue组件中接收参数的方式...

    1. Vue传参方式 1.1 通过动态路由传参 我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件.例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染.那 ...

  6. hibernate mysql 视图_转:hibernate映射视图的两种方式

    本文转自:http://blog.csdn.net/id19870510/article/details/5453965 1.数据库已经建立视图,hibernate只是把视图当作普通的表来映射. 视图 ...

  7. 创建二叉树的代码_解二叉树的右视图的两种方式

    给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值. 示例: 问题分析 这题说的很明白,就是站在一棵二叉树的右边,你所能看到的结点值.对于二叉树的遍历,前面有简单 ...

  8. python接口服务两种方式(被调用、主动推送)

    项目中用python开发,要对外接口时,根据场景不同,一般有两种方式: 外部调用python接口,返回数据 接口主动向外部推送数据 1外部调用python接口,返回数据 这种方式一般可以通过http接 ...

  9. 运行python程序的两种方式交互式和文件式_执行Python程序的两种方式

    交互式(了解) 交互式环境下,敲完一条命令按下enter键马上能看到结果,调试程序方便.程序无法永久保存,关掉cmd窗口数据就消失了. 命令行式(了解) 打开文本编辑器,在文本编辑器中写入一串字符. ...

最新文章

  1. SBO应用技术一则-格式化
  2. ST-3806系列单圈编码器 测试说明
  3. html 移动设备不显示,IT兄弟连 HTML5教程 在移动设备上设置原始大小显示
  4. apache +php + mysql_apache+php+mysql
  5. 《C++ Primer》10.1节练习
  6. numpy统计分布显示
  7. [Robot Framework] 怎么写动态等待?
  8. Ubuntu开启Mongodb 外网访问
  9. linux更改root密码_如何在Linux中更改root密码
  10. ArcGIS 视域分析
  11. android四级菜单,android实现菜单三级树效果
  12. visio2010画图
  13. onenote标注pdf笔记_你们怎么用onenote做读书笔记呢?
  14. RabbitMQ 快速入门指南
  15. 微信自研生产级 Paxos 类库 PhxPaxos 实现原理介绍
  16. excel如何快速统计一列中相同数值出现的个数
  17. Java好学吗?现在待遇如何?
  18. 为什么说Vue是单页面应用呢?
  19. GPL对应的Bioconductor注释包(最全)
  20. Pytorch 从零开始实现 GRU

热门文章

  1. 如何用计算机打出平方,平方符号在电脑怎么打出来(电脑输入平方符号的2种方法)...
  2. 删除Android空行
  3. java级联_Java构造器:级联调用,调用兄弟构造器
  4. Linux内存memtest,详细讲解 Linux极品内存检测软件 Memtest86
  5. 一篇文章,只用看三遍,终生不忘网络分层
  6. 多波段 “均值标准距”的计算
  7. apche的log4j.properties和log4j2.xml的配置和使用
  8. 记笔记-文件记笔记方法
  9. ssm药品大全网站的设计与实现毕业设计源码281128
  10. 实习每日总结_20161212