范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

微信扫码登录之最简实现

  最近开发某应用的PC端后台管理时,突然对登录页面的账号密码还有图片识字验证码感到厌烦了,不仅填写麻烦,要记账号密码也麻烦。为什么不尝试用微信扫码登录呢?功能实现后,我整理出来分享给大家(友情提示:阅读本文需要比较熟悉微信公众号的相关开发,前端框架是基于vue3的element plus,后端是.net6.0 的c# )。本文是针对PC上web应用的登录场景下,实际上我以前做过桌面端wpf程序的微信扫码登录,大致流程和代码也是一样的,也就是说所有客户端显示二维码,让用户扫码登录,处理流程大体是一样,差异只是因为客户端不同,扫码成功后服务端发送登录信息给客户端所采用的推送方式也不同。
  一 功能设计描述
  在PC上打开后台登陆页,无账号密码录入框,只显示一个二维码。拿出手机微信扫码,手机端显示登录成功的提示,然后pc端的登录页面自动跳转到登录后的下个页面。
  二开发前提条件:
  作为管理后台,要用微信扫码登录,就表示登录用户在数据库里必须已记录了在自家公众号下的openid。简单说,得有公众号,用户表里得有用户的openid(如何获取可以参考微信公众号开发文档),因为如何建立后台管理用户大家都各有各的做法,我这里就很简单,发个链接给用户微信,让他点开获取微信身份授权后,再填入他在管理后台的账号密码,连同微信授权code一起发到服务端即可。接口地址必须在公众号的授权回调域中配置好。更详细内容请参考微信公众号开发的网页授权部分。
  三 程序流程设计
  登陆页面初始化,生成随机字符串sessionid, 二维码链接带上sessionid ,当用微信扫二维码时,服务端获得用户微信openid进而通过openid找到用户,核查合法后把用户信息和sessionid一起写入缓存。anxios则用sessionid作为参数查询服务端的登录结果,服务端则从缓存读取该sessionid的登录信息返回给客户端,客户端获得登录信息后存在本地并跳转主页,这是大致的流程。
  由于扫码成功后,登录页面需要自动完成登录过程,这里就涉及了一个web开发常见的问题-推送,即扫码后服务端需要主动把登录结果发送给登录页面。本着用最简单方式实现的目的,我这里就是直接就用axios发一个正常请求,然后把 connect timeout参数设置大一点,我打算通过服务端hold住线程轮询数据来实现。当然更完美一点的方案,就是用settimeout之类让请求轮询执行,或者长轮询,或者使用websocket等方法,因篇幅限制,不展开细讲。
  1 客户端 登录页面vue代码,我过滤了ui样式以及细节处理的代码,就是一个显示二维码的vue组件vue-qr,页面初始化生成一个sessionid,拼在一个服务端接口地址上,形成二维码组件的链接。页面初始化同时也用sessionid发起查询登录结果请求。
  2 服务端查询登录结果接口代码,因为逻辑相对简单,所以我先讲这个。简单描述就是收到客户端请求后,用sessionid查询缓存,用每隔2秒轮询查询,一直到查到有结果才返回客户端。客户端收到登录结果就进行下一步处理。        ///          /// 返回登录结果         ///          /// 客户端sessionid         ///          [EnableCors]         [HttpGet]         [AllowAnonymous]         public object CheckLogin(string sessionId)         {             var loginResult = Redis_Utility.Get(#34;login_{sessionId}");             while (loginResult == null)             {                 Thread.Sleep(2000);                 loginResult = Redis_Utility.Get(#34;login_{sessionId}");             }             return loginResult;         }
  3 二维码对应服务端代码。这个接口地址也就是二维码的链接,即用户微信扫码后打开的地址,此时code参数为空,服务端会把当前页面重定向到微信的授权页面,获取到微信授权code后再跳转回当前接口地址,此时code不为空了,服务端拿到code,结合公众号的appid accesstoken之类就可以从微信得到用户的openid,拿到openid就可以查询用户表,剩下的不用多介绍了吧。实际开发时 为了使得程序更简单易维护,也可以把接口拆分开,一个是扫码接口,一个是微信授权后跳转回来的接口,我为了省事,两个接口合并在一起,通过检查code是否为空,识别出是扫码还是微信授权后跳转回来。登录成功后 输出一段html代码在手机上显示。///          /// 登录接口         ///          /// 客户端sessionid         /// 公众号授权code              /// {userInfo:xxxx, token:xxxx}         [HttpGet]         [AllowAnonymous]         public async Task Login(string sessionId, string? code = null)         {             if (string.IsNullOrEmpty(code))             {                 string redirect_uri = HttpUtility.UrlEncode(Request.GetDisplayUrl());//授权后跳转回来                 Response.Redirect(#34;https://open.weixin.qq.com/connect/oauth2/authorize?appid={APPID}&redirect_uri={redirect_uri}&response_type=code&scope=SCOPE&state=STATE#wechat_redirect");             }             else             {                 string openId = await WechatServices.GetOpenId(code);                 var result = adminServices.Login(openId);                 if (result.Code == 0)                 {                     Redis_Utility.Set(#34;expert_admin_login_{sessionId}", result.Data, 1);                     string html = htmlTemp.Replace("$content", "登录成功");                     await Response.WriteAsync(html);                 }                 else                 {                     await Response.WriteAsync(result.Message);                 }             }         }
  码字辛苦,如果觉得有参考价值请点个赞,如果有看不懂的地方欢迎提问,如果有更好更简单的办法欢迎指教!
漫步者W820NB评测,300价位的降噪蓝牙耳机,不吹不黑说说心里话耳机几乎是当代年轻人必不可少的东西,无论是通勤路上享受音乐观看影视剧,还是学习工作中需要隔绝外音集中注意力,耳机都是必备产品。有了它不仅仅能够避免吵到别人,而且还可以快速沉浸在属于日本爱华收音机麻雀虽小五脏俱全几个月之前在一个专业户手上淘了一款日本爱华的收音机,今天把它开机测试一下里面有一个电池的正极电线断了。不通电重新焊接一下,可能是打开盖子用力了一点。电线扯断买回来的时候是好的。这个阿里腾讯生态互通的B面是11ampamplt1编辑导读越来越多的迹象表明,阿里和腾讯要互通生态了。这两个分别在各自的领域做到了王者的企业,如何相互合作是否能做到112呢?本文作者认为不然,很有可能是111。为什么这么说呢?一起FIL智能合约解读这可以通过几个关键的方式实现,都可以通过定制的Chainlink外部适配器实现1。智能合约输入使用Chainlink口令将存储在星际文件系统上的经过密码学证明的数据桥接到区块链上。三星手机逐渐衰落,小米正在崛起,有望成为全球第一在现在的全球手机品牌中,由三星和苹果手机垄断的局面已经逐渐分崩离析,恐怕再也回不到曾经的巅峰时期了,因为我国的国产手机品牌已经在强势崛起,不仅在国内深受国民的喜爱,更是在国际市场上这款耳机不用连手机,也不用入耳,还自带8G存储蓝牙耳机发展到今天,同质化越来越严重,几款耳机放在面前,很难从中选出一款优秀的。再加上各大品牌花里胡哨的宣传,让用户选购耳机时更加头大,如何在众多品牌耳机中选出符合自身需求的耳机。爷青回!索尼线上博物馆开张多款经典手机重现近日,索尼官方网站上线了一个索尼Xperia线上博物馆页面。该页面收纳了从索尼爱立信最早在2001年推出的手提电话C1002S到如今最新的索尼Xperia1III所有的手机产品。C苹果为iOS15官方天气App引入重大功能与设计改进在2020年收购了流星的天气应用DarkSky之后,苹果终于在iOS15官方天气App中引入了重大的设计改进。首先,从外观来看,iOS15中的新版天气应用,已能够较以往更加一目了然特斯拉在人工智能日推出DojoD1芯片8月19日,也就是汽车制造商的人工智能日,特斯拉发布了一款为其人工智能网络提供数据中心的训练服务的定制芯片。Autopilot硬件高级总监GaneshVenkataramanan表十万元档就能有600km续航?合创Z03到底是什么来头8月20日晚,HYCAN合创品牌宣布旗下紧凑型车纯电动SUV车型合创Z03,正式开启大定。从13万元起的预售价来看,合创Z03将进入国内市场纯电动车竞争相对激烈的1015万元价格区粤湾商闻杭州政府建二手房交易平台,买卖房无需中介?政策速递PolicyNews三孩政策写入计生法,社会抚养费废止施行近二十年的人口与计划生育法(下称人口计生法)迎来第二次修改三孩政策入法,社会抚养费及相关处分的规定删除。人口政策调
三星SK海力士即将提交芯片业务信息,中国客户信息恐泄露给美国为解决全球芯片荒,美国政府要求芯片制造商自愿分享商业资料,引发业者担忧,此举恐泄漏商业机密。不过,原持犹豫态度的韩国芯片巨头三星电子(SamsungElectronics)和SK海网购营销信息调查退订仍会遭到骚扰,短信没停电话又来1258条这是北京市海淀区居民戴莹手机里未读短信的数量,基本都是各类电商的营销短信。26岁的戴莹大学时开始接触线上购物,网购已经成为其生活的一部分,也带来了很多的烦恼。其中,电商的忆捷移动固态硬盘M1比身份证还小,让你享受数据快速传输的乐趣作为自媒体,平时有许多产品的视频或者图片存储处理,之前用的是128G的U盘,很快就满了,而且数据处理速度太慢,在这个数据信息爆炸的时代,速度是影响体验最重要的一环,所以我最近入手了IDC数据2021上半年中国公有云PaaS市场,亚马逊云科技排第二2021年10月下旬,IDC发布中国公有云服务市场(2021上半年)跟踪报告,数据显示,2021年上半年,中国公有云服务整体市场规模(IaaSPaaSSaaS)达到123。1亿美元消费维权速报丨升级5G宽带套餐必须租赁光猫?电信已退费实习生王沫初澎湃新闻记者吕新文营业厅退款凭证受访者供图近日,广东中山市的梁先生向澎湃质量报告投诉平台(httpstousu。thepaper。cn)反映,他在10月15日联系中国电手慢无10元米家小夜灯速抢!晚上起夜不摸黑搜罗全网紧俏数码尖儿货,分享抢购经验,手把手教你羊毛如何薅,尽在ZOL全新栏目手慢无。很多小伙伴起夜的时候都很不方便,迷迷糊糊摸黑走路,稍有不慎还会摔倒,所以现在越来越多的人会在家花半个月工资入手华为P50Pro,重度使用两个月,我认为它能用五年作为一个每天两点一线奔波的人,路途上的时间可能要花费3个小时,手机成为了我的最佳伴侣,我几乎无时无刻不在捧着手机,会议记录用手机,看视频用手机,打游戏用手机,而我在用坏了上一部手机苦熬4年中国面板终于取得零的突破,正式向苹果供应OLED面板中国最大也是全球最大的液晶面板企业京东方已正式向苹果供应OLED面板,用于iPhone12上,这是京东方在2017年量产OLED面板以来首次实现向苹果供应OLED面板的宏愿。苹果对一次就能看明白,实测惠普暗影精灵7锐龙版纵观当前笔记本市场,主流游戏本相当火爆,此外基于AMDRDNA2架构的RadeonRX6000M移动GPU游戏本产品全线上市,关注这批产品的玩家颇多。那么问题来了,这些CPUGPU当科技创新遇见节水灌溉出品科普中国制作吕谋超(中国农业科学院农田灌溉研究所)监制中国科学院计算机网络信息中心为保证国家的口粮食品安全,促进乡村振兴和绿色发展,国家正在积极推动高标准农田建设高效节水建设和孙正义投资滴滴,亏了多少钱?千禧年之后,中国的互联网公司迎来了飞速发展,百度网易等中国互联网先驱不断探索,才有了今天的成绩。互联网的前期发展离不开烧钱,而很多财团也依靠投资中国互联网企业,获得了百倍甚至千倍收