private static async Task <ResultMo <OauthUserMo> > AddOrUpdateOauthUser(SocialPaltforms plat, string code, string state) { var userWxRes = await SnsCommon.GetOauthUserByCode(plat, code, state); var userRes = await OauthUserRep.Instance.GetOauthUserByAppUserId( MemberShiper.AppAuthorize.TenantId, userWxRes.data.app_user_id, plat); if (userRes.IsSuccess()) { var user = userRes.data; user.SetFromSocial(userWxRes.data); await OauthUserRep.Instance.UpdateUserWithToken(user); return(new ResultMo <OauthUserMo>(user)); } if (!userRes.IsResultType(ResultTypes.ObjectNull)) { return(userRes); } var newUser = userWxRes.data; var idRes = await OauthUserRep.Instance.Add(newUser); if (!idRes.IsSuccess()) { return(idRes.ConvertToResultOnly <OauthUserMo>()); } newUser.id = idRes.id; return(new ResultMo <OauthUserMo>(newUser)); }
/// <summary> /// 注册第三方信息到系统中 /// </summary> /// <param name="plat"></param> /// <param name="code"></param> /// <param name="state"></param> /// <returns></returns> public async Task <UserTokenResp> SocialAuth(SocialPaltforms plat, string code, string state) { var oauthUserRes = await AddOrUpdateOauthUser(plat, code, state); if (!oauthUserRes.IsSuccess()) { return(oauthUserRes.ConvertToResult <UserTokenResp>()); } UserInfoBigMo user; var type = MemberAuthorizeType.User; var oauthUser = oauthUserRes.data; if (oauthUser.user_id > 0) // 已经存在绑定,直接登录成功 { var userRes = await UserInfoRep.Instance.GetById(oauthUser.user_id); if (!userRes.IsSuccess()) { return(userRes.ConvertToResult <UserTokenResp>()); } user = userRes.data; MemberEvents.TriggerUserLoginEvent(user, MemberShiper.AppAuthorize); } else { var regConfig = GetRegConfig(MemberShiper.AppAuthorize); user = oauthUser.ConvertToBigMo(); if (regConfig.OauthRegisteType == OauthRegisteType.JustRegiste) { // 授权后直接注册用户 var idRes = await UserInfoRep.Instance.Add(user); if (!idRes.IsSuccess()) { return(idRes.ConvertToResult <UserTokenResp>()); } user.id = idRes.id; #pragma warning disable 4014 OauthUserRep.Instance.UpdateUserIdByOauthId(oauthUser.id, user.id); #pragma warning restore 4014 MemberEvents.TriggerUserLoginEvent(user, MemberShiper.AppAuthorize); } else { // 授权后通知前端,执行绑定相关操作 user.id = oauthUser.id; user.status = regConfig.OauthRegisteType == OauthRegisteType.Bind ? (int)MemberStatus.WaitOauthBind : (int)MemberStatus.WaitOauthChooseBind; type = MemberAuthorizeType.OauthUserTemp; } } return(GenerateUserToken(user, type)); }
public async Task <UserTokenResp> SocialAuth(SocialPaltforms plat, string code, string state) { if (string.IsNullOrEmpty(code)) { return(new UserTokenResp(ResultTypes.ParaError, "code 不能为空!")); } return(await service.SocialAuth(plat, code, state)); }
/// <summary> /// 获取处理Hander /// </summary> /// <param name="plat">平台类型</param> /// <returns></returns> internal static IOauthHander GetHandlerByPlatform(SocialPaltforms plat) { IOauthHander handler; switch (plat) { case SocialPaltforms.Wechat: handler = WxOauthHander.Instance; break; // todo 添加其他平台 default: handler = BaseOauthHander <NoneOauthHander> .Instance; break; } handler.SetCOntextConfig(MemberShiper.AppAuthorize); return(handler); }
/// <summary> /// 获取授权用户并更新信息 /// </summary> /// <param name="plat"></param> /// <param name="code"></param> /// <param name="state"></param> /// <returns></returns> internal static async Task <ResultMo <OauthUserMo> > GetOauthUserByCode(SocialPaltforms plat, string code, string state) { var handler = GetHandlerByPlatform(plat); var tokenRes = await handler.GetOauthTokenAsync(code, state); if (!tokenRes.IsSuccess()) { return(tokenRes.ConvertToResultOnly <OauthUserMo>()); } var userWxRes = await handler.GetOauthUserAsync(tokenRes.data.access_token, tokenRes.data.app_user_id); if (!userWxRes.IsSuccess()) { return(tokenRes.ConvertToResultOnly <OauthUserMo>()); } userWxRes.data.SetTokenInfo(tokenRes.data); return(userWxRes); }
public async Task <ResultMo <OauthUserMo> > GetOauthUserByAppUserId(long tenantId, string appUId, SocialPaltforms plat) { return(await Get(u => u.app_user_id == appUId && u.tenant_id == tenantId && u.platform == plat)); }
public ResultMo <string> GetOauthUrl(SocialPaltforms plat, string redirectUrl, string state, AuthClientType type) { return(service.GetOauthUrl(plat, redirectUrl, state, type)); }
/// <summary> /// 获取授权地址 /// </summary> /// <param name="plat">平台</param> /// <param name="redirectUrl">重定向回跳地址</param> /// <param name="state">返回参数,自行编码</param> /// <param name="type">授权类型</param> /// <returns></returns> public ResultMo <string> GetOauthUrl(SocialPaltforms plat, string redirectUrl, string state, AuthClientType type) { var handler = SnsCommon.GetHandlerByPlatform(plat); return(handler.GetOauthUrl(redirectUrl, state, type)); }