public IHttpActionResult GetAuth(string type) { try { var request = Context.GetCurrentRequest(); var config = Utils.GetConfigInfo(); var oAuthType = OAuthType.Parse(type); var redirectUrl = request.GetQueryString("redirectUrl"); if (string.IsNullOrEmpty(redirectUrl)) { redirectUrl = ApiUtils.GetHomeUrl(); } var url = string.Empty; if (oAuthType == OAuthType.Weibo) { var client = new WeiboClient(config.WeiboAppKey, config.WeiboAppSecret, redirectUrl); url = client.GetAuthorizationUrl(); } else if (oAuthType == OAuthType.Weixin) { var client = new WeixinClient(config.WeixinAppId, config.WeixinAppSecret, redirectUrl); url = client.GetAuthorizationUrl(); } else if (oAuthType == OAuthType.Qq) { var client = new QqClient(config.QqAppId, config.QqAppKey, redirectUrl); url = client.GetAuthorizationUrl(); } if (!string.IsNullOrEmpty(url)) { HttpContext.Current.Response.Redirect(url); } return(BadRequest("类型不正确")); } catch (Exception ex) { return(InternalServerError(ex)); } }
public async Task <ActionResult> GetAuth([FromRoute] string type, [FromQuery] GetAuthRequest request) { var oAuthType = OAuthType.Parse(type); var host = ApiUtils.GetHost(Request); var redirectUrl = request.RedirectUrl; if (string.IsNullOrEmpty(redirectUrl)) { redirectUrl = ApiUtils.GetHomeUrl(); } var url = string.Empty; if (oAuthType == OAuthType.Weixin) { var settings = await _loginManager.GetWeixinSettingsAsync(); var client = new WeixinClient(settings.WeixinAppId, settings.WeixinAppSecret, host, redirectUrl); url = client.GetAuthorizationUrl(); } else if (oAuthType == OAuthType.Qq) { var settings = await _loginManager.GetQqSettingsAsync(); var client = new QqClient(settings.QqAppId, settings.QqAppKey, host, redirectUrl); url = client.GetAuthorizationUrl(); } else if (oAuthType == OAuthType.Weibo) { var settings = await _loginManager.GetWeiboSettingsAsync(); var client = new WeiboClient(settings.WeiboAppKey, settings.WeiboAppSecret, host, redirectUrl); url = client.GetAuthorizationUrl(); } if (!string.IsNullOrEmpty(url)) { return(Redirect(url)); } return(this.Error("类型不正确")); }
public IHttpActionResult GetRedirect(string type) { try { var request = Context.GetCurrentRequest(); var config = Utils.GetConfigInfo(); var oAuthType = OAuthType.Parse(type); var redirectUrl = request.GetQueryString("redirectUrl"); var code = request.GetQueryString("code"); var userName = string.Empty; if (oAuthType == OAuthType.Weibo) { var client = new WeiboClient(config.WeiboAppKey, config.WeiboAppSecret, redirectUrl); string name; string screenName; string avatarLarge; string gender; string uniqueId; client.GetUserInfo(code, out name, out screenName, out avatarLarge, out gender, out uniqueId); userName = OAuthDao.GetUserName(OAuthType.Weibo.Value, uniqueId); if (string.IsNullOrEmpty(userName)) { var userInfo = Context.UserApi.NewInstance(); userInfo.UserName = Context.UserApi.IsUserNameExists(name) ? Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "") : name; userInfo.DisplayName = screenName; userInfo.AvatarUrl = avatarLarge; userInfo.Gender = gender; string errorMessage; Context.UserApi.Insert(userInfo, Guid.NewGuid().ToString(), out errorMessage); userName = userInfo.UserName; OAuthDao.Insert(new OAuthInfo { Source = OAuthType.Weibo.Value, UniqueId = uniqueId, UserName = userName }); } } else if (oAuthType == OAuthType.Weixin) { var client = new WeixinClient(config.WeixinAppId, config.WeixinAppSecret, redirectUrl); string nickname; string headimgurl; string gender; string unionid; client.GetUserInfo(code, out nickname, out headimgurl, out gender, out unionid); userName = OAuthDao.GetUserName(OAuthType.Weixin.Value, unionid); if (string.IsNullOrEmpty(userName)) { var userInfo = Context.UserApi.NewInstance(); userInfo.UserName = Context.UserApi.IsUserNameExists(nickname) ? Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "") : nickname; userInfo.DisplayName = nickname; userInfo.AvatarUrl = headimgurl; userInfo.Gender = gender; string errorMessage; Context.UserApi.Insert(userInfo, Guid.NewGuid().ToString(), out errorMessage); userName = userInfo.UserName; OAuthDao.Insert(new OAuthInfo { Source = OAuthType.Weixin.Value, UniqueId = unionid, UserName = userName }); } } else if (oAuthType == OAuthType.Qq) { var client = new QqClient(config.QqAppId, config.QqAppKey, redirectUrl); string displayName; string avatarUrl; string gender; string uniqueId; client.GetUserInfo(code, out displayName, out avatarUrl, out gender, out uniqueId); userName = OAuthDao.GetUserName(OAuthType.Qq.Value, uniqueId); if (string.IsNullOrEmpty(userName)) { var userInfo = Context.UserApi.NewInstance(); userInfo.UserName = Context.UserApi.IsUserNameExists(displayName) ? Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "") : displayName; userInfo.DisplayName = displayName; userInfo.AvatarUrl = avatarUrl; userInfo.Gender = gender; string errorMessage; Context.UserApi.Insert(userInfo, Guid.NewGuid().ToString(), out errorMessage); userName = userInfo.UserName; OAuthDao.Insert(new OAuthInfo { Source = OAuthType.Qq.Value, UniqueId = uniqueId, UserName = userName }); } } if (!string.IsNullOrEmpty(userName)) { request.UserLogin(userName, true); } HttpContext.Current.Response.Redirect(redirectUrl); return(Ok()); } catch (Exception ex) { return(InternalServerError(ex)); } }
public async Task <ActionResult <GetRedirectResult> > GetRedirect([FromRoute] string type, [FromQuery] GetRedirectRequest request) { var host = ApiUtils.GetHost(Request); var oAuthType = OAuthType.Parse(type); var userName = string.Empty; if (oAuthType == OAuthType.Weixin) { var settings = await _loginManager.GetWeixinSettingsAsync(); var client = new WeixinClient(settings.WeixinAppId, settings.WeixinAppSecret, host, request.RedirectUrl); var userInfo = await client.GetUserInfoAsync(request.Code); userName = await _oAuthRepository.GetUserNameAsync(OAuthType.Weixin.Value, userInfo.UnionId); if (string.IsNullOrEmpty(userName)) { var user = new User { UserName = await _userRepository.IsUserNameExistsAsync(userInfo.Nickname) ? Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "") : userInfo.Nickname, DisplayName = userInfo.Nickname, AvatarUrl = userInfo.HeadImgUrl }; var(newUser, _) = await _userRepository.InsertAsync(user, Guid.NewGuid().ToString(), PageUtils.GetIpAddress(Request)); userName = newUser.UserName; await _oAuthRepository.InsertAsync(new OAuth { Source = OAuthType.Weixin.Value, UniqueId = userInfo.UnionId, UserName = userName }); } } else if (oAuthType == OAuthType.Qq) { var settings = await _loginManager.GetQqSettingsAsync(); var client = new QqClient(settings.QqAppId, settings.QqAppKey, host, request.RedirectUrl); var userInfo = await client.GetUserInfoAsync(request.Code); userName = await _oAuthRepository.GetUserNameAsync(OAuthType.Qq.Value, userInfo.UniqueId); if (string.IsNullOrEmpty(userName)) { var user = new User { UserName = await _userRepository.IsUserNameExistsAsync(userInfo.DisplayName) ? Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "") : userInfo.DisplayName, DisplayName = userInfo.DisplayName, AvatarUrl = userInfo.AvatarUrl }; var(newUser, _) = await _userRepository.InsertAsync(user, Guid.NewGuid().ToString(), PageUtils.GetIpAddress(Request)); userName = newUser.UserName; await _oAuthRepository.InsertAsync(new OAuth { Source = OAuthType.Qq.Value, UniqueId = userInfo.UniqueId, UserName = userName }); } } else if (oAuthType == OAuthType.Weibo) { var settings = await _loginManager.GetWeiboSettingsAsync(); var client = new WeiboClient(settings.WeiboAppKey, settings.WeiboAppSecret, host, request.RedirectUrl); var userInfo = await client.GetUserInfoAsync(request.Code); userName = await _oAuthRepository.GetUserNameAsync(OAuthType.Weibo.Value, userInfo.UnionId); if (string.IsNullOrEmpty(userName)) { var user = new User(); user.UserName = await _userRepository.IsUserNameExistsAsync(userInfo.Name) ? Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "") : userInfo.Name; user.DisplayName = userInfo.ScreenName; user.AvatarUrl = userInfo.AvatarLarge; var(newUser, _) = await _userRepository.InsertAsync(user, Guid.NewGuid().ToString(), PageUtils.GetIpAddress(Request)); userName = newUser.UserName; await _oAuthRepository.InsertAsync(new OAuth { Source = OAuthType.Weibo.Value, UniqueId = userInfo.UnionId, UserName = userName }); } } var token = _authManager.AuthenticateUser(await _userRepository.GetByUserNameAsync(userName), true); if (oAuthType == OAuthType.Qq || oAuthType == OAuthType.Weibo) { return(Redirect(PageUtils.AddQueryString(request.RedirectUrl, $"token={token}"))); } else { return(new GetRedirectResult { RedirectUrl = request.RedirectUrl, Token = token }); } }