Vue+abp微信扫码登录的实现代码示例
网络编程 2021-07-04 15:02www.168986.cn编程入门
这篇文章主要介绍了Vue+abp微信扫码登录的实现代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们狼蚁网站SEO优化随着长沙网络推广来一起学习学习吧
最近系统中要使用微信扫码登录,根据微信官方文档和网络搜索相关文献实现了。分享给需要的人,也作为自己的一个笔记。后端系统是基于ABP的,所以部分代码直接使用了abp的接口,直接拷贝代码编译不通过。
注册微信开放平台账号#
在微信开放平台注册,注意是开放平台不是公众平台,这里需要300元,然后申请网站应用。审核通过后获取到AppID和AppSecret以及登记的网站url。只有此url下的地址微信扫码后才能回调。
具体申请条件见官方文档。
生成登录二维码#
在vue登录页面嵌入登录二维码,根据官方文档,在页面中放入一个div元素,二维码就放在此元素中,注意var obj = new WxLogin必须放在mounted方法中执行,此时vue才会把dom元素初始化挂载到dom树,可以参见vue官方文档生命周期介绍。
<template> <div id="login" class="login"></div> </template> <script> export default { name: "WXLogin", data: function() { return {}; }, mounted() { this.wechatHandleClick(); document.getElementsByTagName("iframe")[0].height="320"; document.getElementsByTagName("iframe")[0].style.marginLeft="30px"; }, methods: { wechatHandleClick() { let ba64Css = "css代码base64编码";// 微信需要https的样式路径,这里将样式内容加密base64,可以避免使用https,如果你的网站是https的可以直接使用安官方文档使用css文件路径 const appid = "你第一步申请的Appid"; const redirect_uri = encodeURIComponent("http:///#/login"); var obj = new WxLogin({ id: "login", //div的id appid: appid, scope: "snsapi_login",//固定内容 redirect_uri: redirect_uri, //回调地址 // href: "http:///static/UserCss/WeChart.css" //自定义样式链接,第三方可根据实际需求覆盖默认样式。 href: "data:text/css;base64," + ba64Css // state: "", //参数,可带可不带 // style: "", //样式 提供"black"、"white"可选,默认为黑色文字描述 }); } } }; </script>
注册回调事件#
用户扫码后微信会回调访问前一步提供的redirect_uri,这里要监控微信回调,并用微信返回的code请求后端,在后端再去访问微信服务器获取token及用户openID
在回调页面中监控路由改变事件以监控微信回调(因为我的二维码和回调在同一个路由页面),如果有其他更好的方法请告诉我。
@Watch("$route") async RouteChange(newVal, oldVal) { await this.weixinRedirect(); } // 请求微信后台 async weixinRedirect() { let code = this.$route.query.code; let state = this.$route.query.state; if (code) { let wxTo = { code, state }; //请求后台 this.$http("/WeixinRedirect",data:wxTo).then((token)=>{ //登录成功,把token写入cookie //跳转到主页 this.$router.replace({ path: "/", replace: true }); }).catch(error => { //保持当前页面 this.$router.replace({ path: "/login", replace: true }); }); } } }
后端接收code请求token#
在appsettings.json中配置AppId和AppSecret
[HttpPost] public async Task<AuthenticateResultModel> WeixinRedirect(string code, string state) { if (code.IsNullOrEmpty()) { throw new UserFriendlyException("微信授权失败,请重新授权"); } var appid = configuration["Authentication:Wechat:AppId"]; var secret = configuration["Authentication:Wechat:AppSecret"]; var url = $"https://api.weixin.qq./sns/oauth2/aess_token?appid={appid}&secret={secret}&code=[code]&grant_type=authorization_code"; var httpClient = httpClientFactory.CreateClient(); httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/4.0 (patible; MSIE 6.0; Windows NT 5.1)"); httpClient.Timeout = TimeSpan.FromMinutes(3); var resstr = await httpClient.GetStringAsync(url); try{ //如果微信授权返回失败这里序列化不成功 var res = JsonSerializationHelper.DeserializeWithType<WeiXinAess_tokenResponse>(resstr); }catch (Exception e) { throw new UserFriendlyException("获取微信aess_token失败"); } if (res == null || res.openid.IsNullOrEmpty()) { throw new UserFriendlyException("获取微信aess_token失败"); } var userId = //根据openID获取用户id,我们系统要求用户提前把微信和用户关联绑定,所以这里可以根据微信用户的openID获取到户农户id; //使用用户直接登录 if (!userId.IsNullOrEmpty()&&long.TryParse(userId, out long id)) { var user = await _userManager.GetUserByIdAsync(id); var loginResult = await _logInManager.LoginByUser(user); string aessToken = CreateAessToken(CreateJwtClaims(loginResult.Identity)); return new AuthenticateResultModel { AessToken = aessToken, EncryptedAessToken = GetEncrpyedAessToken(aessToken), ExpireInSeconds = (int)_tokenConfiguration.Expiration.TotalSeconds, UserId = loginResult.User.Id }; } throw new UserFriendlyException("微信尚未绑定账号,请使用账号登录后绑定微信。"); }
WeiXinAess_tokenResponse类型
public class WeiXinAess_tokenResponse { public string aess_token { get; set; } public int expires_in { get; set; } public string refresh_token { get; set; } public string openid { get; set; } public string scope { get; set; } public string unionid { get; set; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
上一篇:Vue学习之组件用法实例详解
下一篇:Vue学习之axios的使用方法实例分析
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程