需求:有个web端,然后移动端使用微信小程序。要把微信用户和系统中的用户对应起来

上一篇搞了个钉钉小程序登录:钉钉小程序登录

微信小程序登录,方便用户输入和系统中校验的也就只有手机号了,既能保证用户唯一标识,也能和系统中的用户关联起来。

数据库表:

AbpUserLogins 表是 AbpUsers表和第三方登录的中介

AbpUser表中的PhoneNumber就是这个Providerkey

首先

微信小程序->

wx.login -> 获取到code -> 后端用code 去拿用户openid和session_key ->返回到前台,微信小程序使用getPhoneNumber-》获取到 iv,encryptedData,加上刚才的session_key -> 后端 解密到手机号,用手机号对应到系统中的用户,然后进行必要的校验-》返回token

作者地址:https://blog.csdn.net/qq_36279445

/// <summary>/// 微信小程序登录 拿code换 session_key, openid/// </summary>/// <param name="model"></param>/// <returns></returns>[HttpGet]public async Task<WeChatToken> GetWeChatToken(ExternalGetTokenModel model){return await _wechatMiniProgramAuthProviderApi.GetWeChatToken(model);}/// <summary>/// 点击获取手机号 -》 session_key,iv, encryptedData/// </summary>/// <param name="model"></param>/// <returns></returns>[HttpPost]public async Task<AuthenticateResultModel> WechatAuthenticate([FromBody] ExternalWechatAuthenticateModel model){_currentTenant = _tenantManager.GetTenantByDomainName(model.DomainName);// 给全局的租户赋值,不然没法访问数据库_unitOfWorkManager.Current.SetTenantId(_currentTenant.Id);//string phoneNumber = getPhoneNumber(model);string phoneNumber = "18253132526";var user = await _userManager.GetUserByPhoneNumberAsync(phoneNumber);if (user == null){throw new UserFriendlyException($"手机号为{phoneNumber}的微信用户在系统内不存在!");}model.AuthProvider = ProviderName;model.ProviderKey = phoneNumber;//model.ProviderKey = user.PhoneNumber;var loginResult = await _logInManager.LoginAsync(new UserLoginInfo(model.AuthProvider, model.ProviderKey, model.AuthProvider), _currentTenant.TenancyName);switch (loginResult.Result){case AbpLoginResultType.Success:{var accessToken = CreateAccessToken(CreateJwtClaims(loginResult.Identity));return new AuthenticateResultModel{AccessToken = accessToken,EncryptedAccessToken = GetEncryptedAccessToken(accessToken),ExpireInSeconds = (int)_configuration.Expiration.TotalSeconds,UserId = loginResult.User.Id};}case AbpLoginResultType.UnknownExternalLogin:{// 理论上不会走这里了// Try to login again with newly registered user!loginResult = await _logInManager.LoginAsync(new UserLoginInfo(model.AuthProvider, model.ProviderKey, model.AuthProvider), _currentTenant.TenancyName);var accessToken = CreateAccessToken(CreateJwtClaims(loginResult.Identity));if (loginResult.Result != AbpLoginResultType.Success){throw _abpLoginResultTypeHelper.CreateExceptionForFailedLoginAttempt(loginResult.Result,model.ProviderKey,_currentTenant.TenancyName);}return new AuthenticateResultModel{AccessToken = accessToken,EncryptedAccessToken = GetEncryptedAccessToken(accessToken),ExpireInSeconds = (int)_configuration.Expiration.TotalSeconds,UserId = loginResult.User.Id};}default:{throw _abpLoginResultTypeHelper.CreateExceptionForFailedLoginAttempt(loginResult.Result,model.ProviderKey,_currentTenant.TenancyName);}}}/// <summary>/// 获取用户手机号,session_key, iv, encryptedData/// </summary>/// <param name="externalWechatAuthenticateModel"></param>private string getPhoneNumber(ExternalWechatAuthenticateModel externalWechatAuthenticateModel){try{byte[] encryData = Convert.FromBase64String(externalWechatAuthenticateModel.encryptedData);RijndaelManaged rijndaelCipher = new RijndaelManaged();rijndaelCipher.Key = Convert.FromBase64String(externalWechatAuthenticateModel.session_key);rijndaelCipher.IV = Convert.FromBase64String(externalWechatAuthenticateModel.iv);rijndaelCipher.Mode = CipherMode.CBC;rijndaelCipher.Padding = PaddingMode.PKCS7;ICryptoTransform transform = rijndaelCipher.CreateDecryptor();byte[] plainText = transform.TransformFinalBlock(encryData, 0, encryData.Length);string result = Encoding.Default.GetString(plainText);dynamic model = Newtonsoft.Json.Linq.JToken.Parse(result) as dynamic;string phoneNumber = model.phoneNumber;//return model.phoneNumber;if (string.IsNullOrEmpty(phoneNumber)){return "";}return phoneNumber;}catch (Exception ex){throw new UserFriendlyException($"获取用户手机号报错:{ex.Message}");}}

Abp 微信小程序登录 基本的流程和实践相关推荐

  1. 微信小程序登录注册的流程及实现思路

    一.登录注册的实现流程 首先,需要配置一个用于封装的文件 http,里面有三个js文件,分别是api.js,env.js,request.js. 1.api.js 用于对各种业务接口的封装 // 引入 ...

  2. 微信小程序登录、支付流程简介

    登录流程 登录流程 1. 获取用户的头像和昵称信息(可选) 2. 通过wx.login() 获取code 3. 把code+用户信息(可选)发送给后端 4. 后端通过code+appid+AppSec ...

  3. 微信小程序-微信小程序登录流程(一)

    微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或搜一下即可打开应用 冷启动: ...

  4. 微信小程序登录流程+介绍wx.login和auth.code2Session

    微信小程序登录流程+介绍wx.login和auth.code2Session 几个核心API和核心字段 wx.login() 调用接口获取登录凭证(code) code2Session 登录凭证校验, ...

  5. Python Flask微信小程序登录流程及登录api实现代码

    1.小程序端调用wx.login 2.判断用户是否授权 3.小程序端访问 wx.getUserInfo 4.小程序端js代码:+ wx.login({success: resp => {// 发 ...

  6. access突然需要登录_早知道早好,微信小程序登录开发需要注意的事项

    最近公司要做一个企业微信的小程序,方便企业内的成员来登录,以便一些公司内的业务,只限于公司内的成员来操作,因为有微信小程序的开发经验,所以先当作微信小程序来开发了! 首先来讲一下这个企业微信小程序与微 ...

  7. Taro -- 微信小程序登录

    Taro微信小程序登录 1.调用Taro.login()获取登录凭证code: 2.调用Taro.request()将code传到服务器: 3.服务器端调用微信登录校验接口(appid+appsecr ...

  8. Spring Boot + 微信小程序——登录凭证校验DEMO

    基本概念 微信小程序-登录凭证校验:通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程. 微信小程序API https://developers.weix ...

  9. php与ipa接口登录验证失败,thinkPHP5.0开发微信小程序登录接口signature验证失败

    我用TP5开发微信小程序登录接口的时候,在校验签名signature那遇到了个坑,一直校验失败,找了很久才发现 原因是:tp的input方法会自动转移html字符,比如'"'转成了 & ...

最新文章

  1. 用TensorFlow训练第一个模型
  2. BoooLee pyretoolkit -- 一个基于python re模块的在线正则表达式测试工具
  3. java nature_Java中BufferedReader和scanner的对比 - nature
  4. 机器学习05神经网络--表示
  5. 薪资是跳出来的,不是涨出来的!
  6. 疑似一加7 Pro 5G版通过3C认证:配备30W快充头
  7. 面试官:说一下JVM常用垃圾回收器的特点、优劣势、使用场景和参数设置
  8. 俄罗斯黑客入侵冬奥会系统,还甩锅给朝鲜?
  9. PLSQL Developer 12 64位下载 v12.0.4汉化中文版
  10. 学习爬虫的第三天 (bs4 \ urllib \ xlwt \ re 的练习爬取豆瓣top250保存成excel格式)
  11. 特征选择+++分裂大法好
  12. H264系列(7):H.264与MPEG4区别
  13. XSSF实现Excel下拉和HSSF实现Excel下拉
  14. 软负载均衡和硬负载均衡
  15. munmap_chunk(): invalid pointer:
  16. mysql 黑马,mysql-黑马-day01
  17. 中国线上超市行业营销态势与投资盈利预测报告(2022-2027)
  18. 对比Mac OS上的PF与iptables
  19. Camtasia2020视频录制软件的安装及pj顶级屏幕录像视频编辑软件
  20. 未安装SQL Server如何打开.mdf文件

热门文章

  1. 日产联手NASA开发新式固态电池,不用昂贵稀有金属,计划2028年商用
  2. 系统更新后出现dll文件丢失问题
  3. 学习ESP8266_11_系统软件定时器
  4. 一种简单、安全的Dota全图新思路 作者:LC 【转】
  5. 车载应用--AUXIN 利用 surfaceView 预览 Camera 数据
  6. Kingbase数据库
  7. Ubuntu在线音乐盒-亦歌
  8. postman导出,断言,批量执行
  9. 在线问诊小程序|互联网医院系统好处有哪些?
  10. chrome使用tab键切换搜索