public ActionResult QQConnect() { if (Request.Params["code"] != null) { QOpenClient qzone = null; var verifier = Request.Params["code"]; var state = Request.Params["state"]; string requestState = Session["requeststate"].ToString(); if (state == requestState) { qzone = new QOpenClient(verifier, state); var currentUser = qzone.GetCurrentUser(); if (this.Session["QzoneOauth"] == null) { this.Session["QzoneOauth"] = qzone; } var friendlyName = currentUser.Nickname; var isPersistentCookie = true; SetAuthCookie(qzone.OAuthToken.OpenId, friendlyName, isPersistentCookie); return(RedirectToAction("Index", "Home")); } } return(View()); }
public OAuthUserInfo GetUserInfo(NameValueCollection queryString) { QOpenClient qzone = null; var verifier = queryString["code"]; var state = queryString["state"]; OAuthQQConfig qqconfig = QQCore.GetConfig(); string url = string.Format(qqconfig.AuthorizeURL + "?grant_type=authorization_code&client_id={0}&state={2}&client_secret={3}&code={4}&redirect_uri={1}", qqconfig.AppId, ReturnUrl, state, qqconfig.AppKey, verifier); QQConnectConfig.SetCallBackUrl(ReturnUrl); qzone = new QOpenClient(qqconfig.AuthorizeURL, qqconfig.AppId, qqconfig.AppKey, verifier, state); OAuthUserInfo userInfo = null; if (qzone != null) { userInfo = new OAuthUserInfo(); var currentUser = qzone.GetCurrentUser(); userInfo.NickName = currentUser.Nickname; userInfo.RealName = currentUser.Nickname; if (!string.IsNullOrWhiteSpace(currentUser.Gender) && (currentUser.Gender == "男" || currentUser.Gender == "女")) { userInfo.IsMale = currentUser.Gender == "男" ? true : false; } userInfo.OpenId = qzone.OAuthToken.OpenId; } return(userInfo); }
public ActionResult Login(string code, string state) { QOpenClient qzone = null; QConnectSDK.Models.User currentUser = null; var verifier = Request.Params["code"]; string state1 = Session["requeststate"].ToString(); qzone = new QOpenClient(verifier, state1); currentUser = qzone.GetCurrentUser(); if (null != currentUser) { return(Content(currentUser.Nickname)); } Session["QzoneOauth"] = qzone; return(View()); }
public ActionResult SocialBind() { //绑定第三方账号 object su = Session[sKey_SocialUserKey]; SocialUser socialUser = su != null ? su as SocialUser : null; string socialName = string.Empty; if (socialUser != null) { switch (socialUser.SocialUserType) { case SocialUserTypeEnum.QQ: try { OAuthToken oToken = new OAuthToken(); oToken.AccessToken = socialUser.AccessToken; oToken.OpenId = socialUser.Uid; QOpenClient qclient = new QOpenClient(oToken); socialName = qclient.GetCurrentUser().Nickname; } catch { } break; case SocialUserTypeEnum.Sina: try { OAuthAccessToken stoken = new OAuthAccessToken(); stoken.Token = socialUser.AccessToken; stoken.UserID = socialUser.Uid; socialName = AMicroblog.GetUserInfo(Convert.ToInt64(stoken.UserID), stoken).Name; } catch { } break; } } ViewBag.SocialName = socialName; return(View("~/Views/Account/socialbind.cshtml")); }
/// <summary> /// 回调处理 /// </summary> /// <param name="code"></param> /// <param name="state"></param> /// <param name="ac"></param> /// <returns></returns> public bool QQCallback(string code, string state, Action <User> ac) { bool IsPass = false; if (string.IsNullOrEmpty(code) || string.IsNullOrEmpty(state)) { return(IsPass); } if (state == this._state) { var qzone = new QOpenClient(code, state); var currentUser = qzone.GetCurrentUser(); if (ac != null && currentUser != null) { ac(currentUser); } return(true); } return(IsPass); }
public OAuthUserInfo GetUserInfo(NameValueCollection queryString) { bool flag; QOpenClient qOpenClient = null; string item = queryString["code"]; string str = queryString["state"]; OAuthQQConfig config = QQCore.GetConfig(); string str1 = string.Concat(config.AuthorizeURL, "?grant_type=authorization_code&client_id={0}&state={2}&client_secret={3}&code={4}&redirect_uri={1}"); object[] appId = new object[] { config.AppId, Service.ReturnUrl, str, config.AppKey, item }; string.Format(str1, appId); QQConnectConfig.SetCallBackUrl(Service.ReturnUrl); qOpenClient = new QOpenClient(config.AuthorizeURL, config.AppId, config.AppKey, item, str); OAuthUserInfo oAuthUserInfo = null; if (qOpenClient != null) { oAuthUserInfo = new OAuthUserInfo(); User currentUser = qOpenClient.GetCurrentUser(); oAuthUserInfo.NickName = currentUser.Nickname; oAuthUserInfo.RealName = currentUser.Nickname; if (string.IsNullOrWhiteSpace(currentUser.Gender)) { flag = true; } else { flag = (currentUser.Gender == "男" ? false : !(currentUser.Gender == "女")); } if (!flag) { oAuthUserInfo.IsMale = new bool?((currentUser.Gender == "男" ? true : false)); } oAuthUserInfo.OpenId = qOpenClient.OAuthToken.OpenId; } return(oAuthUserInfo); }
/// <summary> /// 回调页面 /// </summary> public ActionResult LoginCallback(LoginModel model, string returnUrl) { QOpenClient qzone = (QOpenClient)this.Session["QzoneOauth"]; var verifier = Request.Params["code"]; var state = Request.Params["state"]; if (Request.Params["code"] != null) { if (qzone == null) { var storeScope = this.GetActiveStoreScopeConfiguration(_storeService, _workContext); var qqExternalAuthSettings = _settingService.LoadSetting <QQExternalAuthSettings>(storeScope); qzone = new QOpenClient(verifier, state, new QQConnectConfig(qqExternalAuthSettings.AppKey, qqExternalAuthSettings.AppSecret, qqExternalAuthSettings.CallBackURI, qqExternalAuthSettings.AuthorizeURL)); if (qzone != null) { this.Session["QzoneOauth"] = qzone; } } else { qzone = (QOpenClient)this.Session["QzoneOauth"]; } string requestState = Session["requeststate"].ToString(); if (state == requestState) { if (qzone.OAuthToken != null) { if (string.IsNullOrEmpty(qzone.OAuthToken.OpenId)) { throw new Exception("Authentication result does not contain openid"); } if (string.IsNullOrEmpty(qzone.OAuthToken.AccessToken)) { throw new Exception("Authentication result does not contain accesstoken data"); } var parameters = new OAuthAuthenticationParameters(Provider.SystemName) { ExternalIdentifier = qzone.OAuthToken.OpenId, OAuthToken = qzone.OAuthToken.AccessToken, OAuthAccessToken = qzone.OAuthToken.OpenId, }; UserClaims claims = new UserClaims(); claims.Contact = new ContactClaims(); parameters.AddClaim(claims); Session["QQAuthorizeParameters"] = parameters; var result = _authorizer.Authorize(parameters); switch (result.Status) { case OpenAuthenticationStatus.Error: { if (!result.Success) { foreach (var error in result.Errors) { ExternalAuthorizerHelper.AddErrorsToDisplay(error); } } return(RedirectToRoute("ThirdAccountRegister", new { styleId = 1 })); } case OpenAuthenticationStatus.AssociateOnLogon: { return(new RedirectResult(Url.LogOn(returnUrl))); } case OpenAuthenticationStatus.AutoRegisteredEmailValidation: { //result return(RedirectToRoute("RegisterResult", new { resultId = (int)UserRegistrationType.EmailValidation })); } case OpenAuthenticationStatus.AutoRegisteredAdminApproval: { return(RedirectToRoute("RegisterResult", new { resultId = (int)UserRegistrationType.AdminApproval })); } case OpenAuthenticationStatus.AutoRegisteredStandard: { return(RedirectToRoute("RegisterResult", new { resultId = (int)UserRegistrationType.Standard })); } default: break; } } return(Redirect(Url.Action("Index", "Home"))); } } return(View()); }
private AdvancedResult <string> Login(string username, string password, ref AdUser loginUser) { UserServiceClient client = new UserServiceClient(); AdvancedResult <string> response = new AdvancedResult <string>(); if (string.IsNullOrEmpty(username) || username.Length < 4 || username.Length > 16) { response.Error = AppError.ERROR_FAILED; response.ExMessage = "登陆失败!用户名长度不合法!"; return(response); } if (string.IsNullOrEmpty(password) || password.Length < 6 || password.Length > 18) { response.Error = AppError.ERROR_FAILED; response.ExMessage = "登陆失败!密码长度不合法!"; return(response); } response = client.Login(username, SecurityHelper.MD5(password)); if (response.Error == AppError.ERROR_SUCCESS) { WriteAuthCookie(username, response.Data); AdvancedResult <AdUser> aduser = client.GetUserInfo(response.Data); loginUser = aduser.Data; //绑定第三方账号 //object su = Session[sKey_SocialUserKey]; //SocialUser socialUser = su != null ? su as SocialUser : null; SocialUser socialUser = SecurityHelper.DecryptObject <SocialUser>(CookieHelper.Get(sKey_SocialUserKey), null); if (socialUser != null) { AdvancedResult <string> result = client.IsBindSocialUser(socialUser); if (result.Error != AppError.ERROR_SUCCESS) { socialUser.UserId = aduser.Data.AdUserId; AdvancedResult <string> bindresponse = client.BindSocialUserAfterLogin(response.Data, socialUser); if (bindresponse.Error == AppError.ERROR_SUCCESS) { switch (socialUser.SocialUserType) { case SocialUserTypeEnum.QQ: try { OAuthToken oToken = new OAuthToken(); oToken.AccessToken = socialUser.AccessToken; oToken.OpenId = socialUser.Uid; QOpenClient qclient = new QOpenClient(oToken); var postresult = qclient.AddTopic(Config.Instance.RegisteredTwitter, "2", SiteUrl); } catch { } break; case SocialUserTypeEnum.Sina: try { OAuthAccessToken stoken = new OAuthAccessToken(); stoken.Token = socialUser.AccessToken; stoken.UserID = socialUser.Uid; UpdateStatusInfo statusInfo = new UpdateStatusInfo(); statusInfo.Status = Config.Instance.RegisteredTwitter + SiteUrl; var postresult = AMicroblog.PostStatus(statusInfo, stoken); } catch { } break; } //绑定成功 response.ExMessage = "绑定成功!"; //Session[sKey_SocialUserKey] = null; CookieHelper.Remove(sKey_SocialUserKey); } else { //绑定失败 response.ExMessage = "绑定失败!请确认该第三方账号未与本站已注册账户绑定!"; } } else { response.ExMessage = "绑定失败!该第三方账号已经于本站现有账号绑定!"; } } } client.Close(); client = null; return(response); }
/// <summary> /// 回调页面 /// </summary> public ActionResult QqConnect() { if (Request.Params["code"] != null) { var verifier = Request.Params["code"]; var state = Request.Params["state"]; string requestState = Session["requeststate"]?.ToString(); if (state == requestState) { var qzone = new QOpenClient(verifier, state); var currentUser = qzone.GetCurrentUser(); if (this.Session["QzoneOauth"] == null) { this.Session["QzoneOauth"] = qzone; } AppUser appUserEntity; var openId = qzone.OAuthToken.OpenId; var accessToken = qzone.OAuthToken.AccessToken; var expiresAt = qzone.OAuthToken.ExpiresAt; DateTime now = DateTime.Now; AppUserAuth userAuth = _appAuthRepository.Queryable(r => r.OpenId == openId && r.DeleteMark == false).FirstOrDefault(); //如果未找到一个openid存在,说明当前用户未使用qq第三方登录 if (userAuth == null) { appUserEntity = new AppUser { NickName = currentUser.Nickname, Avatar = currentUser.Figureurl, Gender = currentUser.Gender, CreatorTime = now, LoginCount = 1, LastLoginTime = DateTime.Now, LastLogIp = Net.Ip, DeleteMark = false, StatusCode = StatusCode.Enable.ToString(), UserRoles = new List <AppUserRole> { new AppUserRole { RoleId = 3 } }, AppUserAuths = new List <AppUserAuth> { new AppUserAuth { IdentityType = IdentityType.Qq.ToString(), OpenId = openId, AccessToken = accessToken, ExpiresAt = expiresAt, CreatorTime = now, DeleteMark = false } } }; _appUserRepository.Insert(appUserEntity); } else { userAuth.AccessToken = accessToken; userAuth.ExpiresAt = expiresAt; userAuth.LastModifyTime = DateTime.Now; _appAuthRepository.Update(userAuth, "AccessToken", "ExpiresAt", "LastModifyTime"); appUserEntity = _appUserRepository.Queryable(r => r.Id == userAuth.UserId && userAuth.DeleteMark == false).FirstOrDefault(); if (appUserEntity != null) { appUserEntity.LoginCount += 1; appUserEntity.LastLoginTime = now; appUserEntity.LastLogIp = Net.Ip; appUserEntity.LastModifyTime = now; _appUserRepository.Update(appUserEntity, "LoginCount", "LastLoginTime", "LastLogIp", "LastModifyTime"); } } var isPersistentCookie = true; FormsAuthentication.SetAuthCookie(qzone.OAuthToken.OpenId, isPersistentCookie); OperatorProvider op = OperatorProvider.Provider; //保存用户信息 if (appUserEntity != null) { op.CurrentUser = new OperatorModel { UserId = appUserEntity.Id, IsSystem = _appUserRepository.IsSystem(appUserEntity.Id), IsAdmin = appUserEntity.LoginName == "admin" ? true : false, LoginName = appUserEntity.LoginName, LoginToken = accessToken, LoginTime = now, NickName = appUserEntity.NickName, Avatar = appUserEntity.Avatar, Email = appUserEntity.Email, PersonalWebsite = appUserEntity.PersonalWebsite }; bool isSystem = _appUserRepository.IsSystem(appUserEntity.Id); if (isSystem) { return(Redirect(Url.Action("Index", "Home"))); } } } else { LogFactory.GetLogger("QQ互联").Error("登录得到的state:" + state + ",session:" + requestState); } } return(Redirect(Url.Action("Index", "App"))); }
/// <summary> /// QQ用户登录 /// </summary> protected void QQLogin() { if (Request.Params["code"] != null) { QOpenClient qzone = null; User currentUser = null; var verifier = Request.Params["code"]; string state = Session["requeststate"].ToString(); qzone = new QOpenClient(verifier, state); // currentUser = qzone.GetCurrentUser(); if (null != currentUser) { string openid = qzone.OAuthToken.OpenId; var SysUser = UserView.Find(string.Format("UserName=N'{0}'", openid)); if (SysUser.ID <= 0) { SysUser.Cent = SystemSetting.RegCent; SysUser.ChineseName = currentUser.Nickname; SysUser.Enable = true; SysUser.Group = 0; SysUser.Image = currentUser.Figureurl; SysUser.LastLoginIP = WS.GetIP(); SysUser.LastLoginTime = DateTime.UtcNow.AddHours(8); SysUser.LoginCount = 1; SysUser.PostCount = 0; SysUser.RegIP = WS.GetIP(); SysUser.RegTime = DateTime.UtcNow.AddHours(8); SysUser.StudentNo = ""; SysUser.TeachNo = ""; SysUser.Tel = ""; SysUser.Twitter = ""; SysUser.UserName = openid; SysUser.UserPass = ""; SysUser.WebSite = ""; SysUser.Weibo = ""; try { var i = qzone.GetWeiboUserInfo("", qzone.OAuthToken.OpenId); SysUser.Address = i.Data.Location; SysUser.Email = i.Data.Email; SysUser.Intro = i.Data.Introduction; SysUser.ZipCode = i.Data.City_code.ToS(); } catch { } UserView.Insert(SysUser); } else { SysUser.LoginCount++; SysUser.LastLoginIP = WS.GetIP(); SysUser.LastLoginTime = DateTime.UtcNow.AddHours(8); UserView.Update(SysUser); } //System.Web.HttpContext.Current.Session["sys_user"] = SysUser.ID; System.Web.HttpCookie cookie = new System.Web.HttpCookie("User"); cookie.Expires = DateTime.Now.AddDays(7); cookie.Values.Add("uid", SysUser.ID.ToString()); cookie.Values.Add("k", Voodoo.Security.Encrypt.Md5(string.Format("{0}{1}{2}", SysUser.ID, SysUser.UserName, SysUser.UserPass, BasePage.SystemSetting.SiteName ))); Voodoo.Cookies.Cookies.SetCookie(cookie); Response.Redirect("/"); } Session["QzoneOauth"] = qzone; } }
public void GetAccessToken(string verifier, ref QoAuthKey oAuthKey) { QOpenClient qzone = new QOpenClient(verifier, oAuthKey.State); oAuthKey.ParseToken(qzone.OAuthToken); }