public async Task <bool> Login(string strOwinConfigName, string strOwinState, string strOwinCode, string strSessionName = "Mob")
        {
            if (!SessionHelper.Owin.IsValid(strOwinState))
            {
                return(false);
            }

            OwinConfig   config       = GetByName(strOwinConfigName);
            OwinTokenDto owinTokenDto = GetTokenDto(config, strOwinCode);

            MemberHelper helper = new MemberHelper();

            Member member = null;

            if (!owinTokenDto.ErrCode.HasValue)
            {
                member = helper.GetDbSet <Member>().Where(o => o.OpenId == owinTokenDto.OpenId).FirstOrDefault();
                if (member != null && !string.IsNullOrEmpty(member.Password))
                {
                    SessionHelper.KeyValues[strSessionName].SetSession(member);
                    return(true);
                }
            }

            OwinUserDto owinDto = GetUserDto(config, owinTokenDto);

            if (owinDto.ErrCode.HasValue)
            {
                LogHelper.Error(owinDto.ErrCode + ":" + owinDto.ErrMsg);
                return(false);
            }

            if (member == null)
            {
                member = helper.GetDbSet <Member>().Where(o => o.OpenId == owinTokenDto.OpenId).FirstOrDefault();
            }

            if (member == null)
            {
                member = new Member
                {
                    OpenId = owinDto.OpenId,
                };
            }

            member.NickName  = owinDto.NickName;
            member.Avatar    = owinDto.HeadImgUrl;
            member.Sex       = owinDto.Sex == "1" ? Sex.Male : Sex.Male;
            member.Password  = EncryptHelper.Encrypt(SystemConfigModel.Instance.DefaultPassword);
            member.ShareCode = GetShareCode();

            if (!(await helper.SaveAsync(member)))
            {
                return(false);
            }
            SessionHelper.KeyValues[strSessionName].SetSession(member);

            string strShareCode = SessionHelper.ShareCode.GetSession <string>();

            if (!string.IsNullOrEmpty(strShareCode))
            {
                await helper.SetMemberReferee(member, strShareCode);
            }

            return(true);
        }