Example #1
0
        private void oAuth_Sina()
        {
            ISinaoAuth oAuthService    = new SinaOAuthService();
            string     requestTokenUrl = oAuthService.GetAuthorizeUri();

            Response.Redirect(requestTokenUrl, true);
        }
Example #2
0
        /// <summary>
        /// 绑定社交账号后的回调函数,使用场景
        /// 1.直接采用社交账号登陆
        /// 2.平台账号登陆后->绑定新的社交账号
        /// </summary>
        public ActionResult Social_Callback(string type)
        {
            SocialState ssResponse = new SocialState();

            try
            {
                //判断登陆的社交账户类型(默认为新浪微博账号)
                String             req_type           = (String.IsNullOrEmpty(type)) ? "1" : type;
                SocialUserTypeEnum socialUserTypeEnum = (SocialUserTypeEnum)Enum.Parse(typeof(SocialUserTypeEnum), req_type);

                //初始化社交账户结构体
                SocialUser socialUser = new SocialUser();
                socialUser.SocialUserType = socialUserTypeEnum;

                #region 获取社交账号的access_token及security_key
                switch (socialUserTypeEnum)
                {
                case SocialUserTypeEnum.Sina:
                    ISinaoAuth sina_oAuthService = new SinaOAuthService();
                    string     _code             = Request["code"];
                    string     access_code       = string.Empty;
                    string     sina_uid          = string.Empty;
                    bool       _isOk             = sina_oAuthService.GetAccessToken(_code, out access_code, out sina_uid);
                    socialUser.AccessToken = access_code;
                    socialUser.Uid         = sina_uid;

                    ssResponse.SocialType = "新浪微博";

                    break;

                case SocialUserTypeEnum.QQ:
                    IQoAuth oAuthService = new QoAuthService();
                    string  verifierCode = Request["code"];
                    //QoAuthKey oAuthKey = (QoAuthKey)Session[sKey_QQoAuthKey];
                    QoAuthKey oAuthKey = SecurityHelper.DecryptObject <QoAuthKey>(CookieHelper.Get(sKey_QQoAuthKey), null);
                    oAuthService.GetAccessToken(verifierCode, ref oAuthKey);

                    socialUser.AccessToken       = oAuthKey.Access_Token;
                    socialUser.AccessTokenSecret = oAuthKey.State;
                    socialUser.Uid = oAuthKey.OpenId;

                    ssResponse.SocialType = "QQ";
                    break;

                default:
                    break;
                }
                #endregion

                //Session[sKey_SocialUserKey] = socialUser;
                CookieHelper.Set(sKey_SocialUserKey, SecurityHelper.EncryptObject(socialUser), DateTime.Now.AddHours(1));
                //用户业务逻辑服务
                #region 社交账号登陆

                //社交账号登陆
                if (socialUserTypeEnum == SocialUserTypeEnum.QQ || socialUserTypeEnum == SocialUserTypeEnum.Sina)
                {
                    //检查社交账号是否和平台账号绑定
                    UserServiceClient       client = new UserServiceClient();
                    AdvancedResult <string> result = client.IsBindSocialUser(socialUser);

                    ssResponse.Logined = true;

                    if (result.Error == AppError.ERROR_SUCCESS)
                    {
                        //跳转到个人中心
                        AdvancedResult <AdUser> aduser = client.GetUserInfo(result.Data);

                        ssResponse.Binded = true;

                        if (aduser.Error == AppError.ERROR_SUCCESS)
                        {
                            WriteAuthCookie(aduser.Data.UserAccount, result.Data);
                            Response.AddHeader("P3P", "CP=CAO PSA OUR");
                            ssResponse.Name = aduser.Data.UserAccount;
                        }
                        CookieHelper.Remove(sKey_SocialUserKey);
                    }
                    else
                    {
                        //提示绑定
                        ssResponse.Binded = false;
                    }
                    client.Close();
                    client = null;
                }
                else
                {
                    ssResponse.Logined = false;
                }


                #endregion
            }
            catch (Exception ex)
            {
                ssResponse.Logined = false;
                ssResponse.Message = ex.Message;
            }

            ViewBag.LoginResponse = JsonHelper.Serialize(ssResponse);
            return(View("~/Views/Account/socialcallback.cshtml"));
        }