예제 #1
0
 public WeiboSession(UserWeiboSetting setting,string screenName,string friendName,string profileImg)
 {
     this.Setting = setting;
     this.ScreenName = screenName;
     this.WeiboFriendName = friendName;
     this.ProfileImg = profileImg;
 }
예제 #2
0
 public WeiboSession(UserWeiboSetting setting)
     : this(setting,string.Empty)
 {
 }
예제 #3
0
 public WeiboSession(UserWeiboSetting setting,string weiboFriendName)
     : this(setting, string.Empty,weiboFriendName, string.Empty)
 {
 }
예제 #4
0
 public Result Update(UserWeiboSetting setting)
 {
     return db.update(setting);
 }
예제 #5
0
 public Result Bind(UserWeiboSetting setting)
 {
     return  db.insert(setting);
 }
예제 #6
0
 private void redirectSinaWeiboRegister(WeiboType type, Common.SinaOAuthAccessToken token,string screenName,string profileImg)
 {
     UserWeiboSetting setting = new UserWeiboSetting
     {
         AccessToken = token.Token,
         ExpireIn = token.ExpiresIn,
         IsSync = 1,
         WeiboUid = token.UserID,
         RefreshToken = token.RefreshToken,
         WeiboType = type.Id,
         AppId = ctx.owner.Id,
         BindTime = DateTime.Now,
         WeiboName = type.Name
     };
     WeiboSession session = new WeiboSession(setting,screenName,type.FriendName,profileImg);
     ctx.web.SessionSet(WeiboSession.SessionName,session);
     redirectUrl(to(new WeiboRegisterController().Bind) + "?type=" + setting.WeiboName);
 }
예제 #7
0
 private void redirectQQWeiboRegister(WeiboType type, OauthKey key,string screenName,string profileImg)
 {
     UserWeiboSetting setting = new UserWeiboSetting
       {
           AccessToken = key.tokenKey,
           AccessSecret = key.tokenSecret,
           IsSync = 1,
           WeiboType = type.Id,
           AppId = ctx.owner.Id,
           BindTime = DateTime.Now,
           WeiboName = type.Name,
           WeiboUid = key.WeiboName
       };
     WeiboSession session = new WeiboSession(setting, screenName, type.FriendName, profileImg);
     ctx.web.SessionSet(WeiboSession.SessionName, session);
     redirectUrl(to(new WeiboRegisterController().Bind) + "?type=" + setting.WeiboName);
 }
예제 #8
0
        public void SinaWeiboCallback()
        {
            string code = ctx.Get("code");
            if (string.IsNullOrEmpty(code))
            {
                return;
            }
            WeiboType type = WeiboType.GetByName("sina");
            if (type == null)
            {
                log.Error("找不到 sina 的 WeiboType,请添加");
                return;
            }
            SinaWeibo w = new SinaWeibo(type.AppKey, type.AppSecret);
            Common.SinaOAuthAccessToken token = w.GetAccessTokenByAuthorizationCode(code, ctx.url.SiteUrl.TrimEnd('/') + to(SinaWeiboCallback));

            UserWeiboSetting setting = _weiboService.Find(type.Id, token.Token,string.Empty);

            //如果用户已经微博绑定此帐户
            if (setting != null)
            {
                //这里做用户登陆处理
                User user = userService.GetById(setting.UserId);
                if (user != null)
                {
                    loginService.Login(user, LoginTime.OneMonth, ctx.Ip, ctx);
                    redirectUrl("/");
                    return;
                }
                else
                {
                    echoRedirect("发生未知错误,请重试");
                    return;
                }
            }

            w.SetToken(token.Token);

            Data.Sina.User.UserInfo weiboUser = w.GetUserInfo(long.Parse(token.UserID));
            if (weiboUser == null)
            {
                echoRedirect("很抱歉,获取失败,请重试", to(Index));
                return;
            }
            //用户是未登陆,那就是用户通过微博注册或是通过此微博直接登陆
            if (!ctx.viewer.IsLogin)
            {
                redirectSinaWeiboRegister(type, token,weiboUser.ScreenName,weiboUser.ProfileImageUrl);
                return;
            }
            //判断用户是否已经绑定了微博,没有绑定则添加,否则更新token
             setting = _weiboService.Find(ctx.viewer.Id, type.Id);
            Result result;
            if (setting == null)
            {
                setting = new UserWeiboSetting();
            }

            setting.WeiboUid = token.UserID;
            setting.RefreshToken = token.RefreshToken;
            setting.WeiboType = type.Id;
            setting.WeiboName = type.Name;
            setting.IsSync = 1;
            setting.AccessToken = token.Token;
            setting.RefreshToken = token.RefreshToken;
            setting.ExpireIn = token.ExpiresIn;
            setting.BindTime = DateTime.Now;
            setting.UserId = ctx.viewer.Id;

            if (setting.Id==default(int))
                result = _weiboService.Bind(setting);
            else
                result = _weiboService.Update(setting);

            if (result.HasErrors)
            {
                errors.Errors.AddRange(result.Errors);
                string error = string.Empty;
                result.Errors.ForEach(c => error = error + c + System.Environment.NewLine);
                log.Error(error);
                echoRedirect("很抱歉,绑定失败,请重试", to(Index));
            }
            else
            {
                echoRedirect("绑定成功");
            }
        }