Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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());
        }
Ejemplo n.º 4
0
        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"));
        }
Ejemplo n.º 5
0
        /// <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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        /// <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());
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        /// <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")));
        }
Ejemplo n.º 10
0
        /// <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;
            }
        }
Ejemplo n.º 11
0
        public void GetAccessToken(string verifier, ref QoAuthKey oAuthKey)
        {
            QOpenClient qzone = new QOpenClient(verifier, oAuthKey.State);

            oAuthKey.ParseToken(qzone.OAuthToken);
        }