diff --git a/src/admin/Bootstrap.Admin/Startup.cs b/src/admin/Bootstrap.Admin/Startup.cs index 095bfef3..f4c94aa5 100644 --- a/src/admin/Bootstrap.Admin/Startup.cs +++ b/src/admin/Bootstrap.Admin/Startup.cs @@ -60,7 +60,7 @@ namespace Bootstrap.Admin services.AddSignalR().AddJsonProtocalDefault(); services.AddSignalRExceptionFilterHandler((client, ex) => client.SendMessageBody(ex).ConfigureAwait(false)); services.AddResponseCompression(); - services.AddBootstrapAdminAuthentication().AddGitee(OAuthHelper.Configure).AddGitHub(OAuthHelper.Configure).AddWeChat(OAuthHelper.Configure); + services.AddBootstrapAdminAuthentication().AddGitee(OAuthHelper.Configure).AddGitHub(OAuthHelper.Configure).AddWeChat(WeChatHelper.Configure); services.AddSwagger(); services.AddButtonAuthorization(MenuHelper.AuthorizateButtons); services.AddBootstrapAdminBackgroundTask(); diff --git a/src/admin/Bootstrap.DataAccess/Helper/WeChatHelper.cs b/src/admin/Bootstrap.DataAccess/Helper/WeChatHelper.cs new file mode 100644 index 00000000..491a4f63 --- /dev/null +++ b/src/admin/Bootstrap.DataAccess/Helper/WeChatHelper.cs @@ -0,0 +1,54 @@ +using Longbow.OAuth; +using Longbow.Security.Cryptography; +using Longbow.WeChatAuth; +using Microsoft.AspNetCore.Authentication.OAuth; +using System; + +namespace Bootstrap.DataAccess +{ + /// + /// 微信登陆帮助类 + /// + public static class WeChatHelper + { + /// + /// 微信登陆配置方法 + /// + /// + /// + public static void Configure(TOptions option) where TOptions : LgbOAuthOptions + { + option.Events.OnCreatingTicket = context => + { + // 生成用户 + var user = ParseUser(context); + user.App = option.App; + OAuthHelper.SaveUser(user, option.Roles); + + // 记录登陆日志 + context.HttpContext.Log(user.DisplayName, true); + return System.Threading.Tasks.Task.CompletedTask; + }; + } + + /// + /// 插入 Gitee 授权用户到数据库中 + /// + /// + /// + private static User ParseUser(OAuthCreatingTicketContext context) + { + var user = context.User.ToObject(); + return new User() + { + ApprovedBy = "OAuth", + ApprovedTime = DateTime.Now, + DisplayName = user.NickName, + UserName = user.UnionId, + Password = LgbCryptography.GenerateSalt(), + Icon = user.HeadImgUrl, + Description = $"{context.Scheme.Name}" + }; + } + } +}