.net core 3.1 实现微信小程序登录

本文介绍了在ABP框架版本5.3和.NET Core 3.1环境下,如何配置和服务端实现微信小程序的登录集成。包括安装Nuget包,修改配置文件,启动配置类的调整,以及在TokenAuthController中添加处理WeChatMiniProgramLoginAsync的方法,实现用户登录和自动注册。小程序端需要调用微信接口获取用户信息并发送到服务器,服务器返回JWT Token进行后续交互。
摘要由CSDN通过智能技术生成

  库版本.net core 3.1

  我的abp版本:abp5.3 .net core 3.1

  请先看微信小程序官方文档。下面说说abp中如何使用。原生asp.net core可以参考实现

  回到顶部

  服务端配置

  1、安装nuget包

  Install-Package BXJG.WeChart -Version 1.0.0

  2、修改配置文件

  abp.web/appsettings.json

  

.net core 3.1 实现微信小程序登录

  3、修改启动配置类

  abp.web//StartupAuthConfigurer.cs

  因为startup中是通过这个类中的静态方法注册身份验证视频相关服务的

  

.net core 3.1 实现微信小程序登录

  View Code

  更多配置请参考视频

  4、实现abp集成

  找到

  abp.web.core/controllers/TokenAuthController

  先注入UserManager

  

.net core 3.1 实现微信小程序登录

  然后添加下面的方法

  1 [HttpPost]

  2 public async Task WeChartMiniProgramLoginAsync()

  3 {

  4

  5 //从第三方登录拿到当前用户(包含openId、sessionKey)

  6 var t = await base.HttpContext.AuthenticateAsync(MiniProgramConsts.AuthenticationScheme);//间接使用第三方身份验证方案获取信息

  7 //拿到openId

  8 var openid = t.Principal.Claims.Single(c => c.Type == ClaimTypes.NameIdentifier).Value;

  9 var tenancyName = GetTenancyNameOrNull();

  10 //尝试做第三发登录(内部通过openid找到本地账号做登录),

  11 var loginResult = await _logInManager.LoginAsync(new UserLoginInfo(MiniProgramConsts.AuthenticationScheme, openid, MiniProgramConsts.AuthenticationSchemeDisplayName), tenancyName);

  12 //根据登录结果,若成功则直接返回jwtToken 或者自动注册后返回

  13 switch (loginResult.Result)

  14 {

  15 case AbpLoginResultType.Success:

  16 {

  17 //更新微信用户信息

  18 foreach (var item in t.Principal.Claims)

  19 {

  20 await userManager.ReplaceClaimAsync(loginResult.User, new Claim(item.Type, ""), item);

  21 }

  22

  23 //返回jwtToken

  24 var accessToken = CreateAccessToken(CreateJwtClaims(loginResult.Identity));

  25 return new ExternalAuthenticateResultModel

  26 {

  27 AccessToken = accessToken,

  28 EncryptedAccessToken = GetEncryptedAccessToken(accessToken),

  29 ExpireInSeconds = (int)_configuration.Expiration.TotalSeconds

  30 };

  31 }

  32 case AbpLoginResultType.UnknownExternalLogin:

  33 {

  34 //若未找到关联的本地账号则自动注册,再返回jwtToken

  35 var newUser = await RegisterExternalUserAsync(new ExternalAuthUserInfo

  36 {

  37 Provider = MiniProgramConsts.AuthenticationScheme,

  38 ProviderKey = openid,

  39 Name = t.Principal.Claims.SingleOrDefault(c => c.Type == "nickName")?.Value,

  40 EmailAddress = Guid.NewGuid().ToString("N") + "@mp",

  41 Surname = "a"

  42 });

  43 if (!newUser.IsActive)

  44 {

  45 return new ExternalAuthenticateResultModel

  46 {

  47 WaitingForActivation = true

  48 };

  49 }

  50

  51 // Try to login again with newly registered user!

  52 loginResult = await _logInManager.LoginAsync(new UserLoginInfo(MiniProgramConsts.AuthenticationScheme, openid, MiniProgramConsts.AuthenticationSchemeDisplayName), tenancyName);

  53 if (loginResult.Result != AbpLoginResultType.Success)

  54 {

  55 throw _abpLoginResultTypeHelper.CreateExceptionForFailedLoginAttempt(

  56 loginResult.Result,

  57 openid,

  58 tenancyName

  59 );

  60 }

  61 //保存微信用户信息(排出openid,因为它存储在userlogins里)

  62 await userManager.AddClaimsAsync(loginResult.User, t.Principal.Claims.Where(c=>c.Type!= ClaimTypes.NameIdentifier));

  63

  64 return new ExternalAuthenticateResultModel

  65 {

  66 AccessToken = CreateAccessToken(CreateJwtClaims(loginResult.Identity)),

  67 ExpireInSeconds = (int)_configuration.Expiration.TotalSeconds

  68 };

  69 }

  70 default:

  71 {

  72 throw _abpLoginResultTypeHelper.CreateExceptionForFailedLoginAttempt(

  73 loginResult.Result,

  74 openid,

  75 tenancyName

  76 );

  77 }

  78 }

  79 }

.net core 3.1 实现微信小程序登录

  回到顶部

  小程序端处理

  小程序调用wx.login拿到code,然后调用wx.getUserInfo拿到用户昵称、头像、性别.....等数据

  将上面的数据组成json Post提交到 我方服务器

  /wechart-miniProgram-signin

  此时会返回一个加密的cookie字符串,小程序端需要想法从响应的cookie中拿到此字符串

  用上面的字符串作为cookie Post请求 我方服务器

  /api/TokenAuth/WeChartMiniProgramLogin

  此时服务端会返回jwtToken

  后续请求跟之前的处理就一样了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值