예제 #1
0
        /// <summary>
        /// 获取登录用户id
        /// </summary>
        /// <returns></returns>
        private int GetUserId(string userId = null)
        {
            var userIdCookie = userId ?? Request.Cookies.First(t => t.Key == "userId").Value;
            var userIdString = EncryptDecryptExtension.DES3Decrypt(userIdCookie, DESKey);

            return(int.Parse(userIdString));
        }
예제 #2
0
        private int GetUserId()
        {
            var userIdCookie = Request.Cookies.FirstOrDefault(t => t.Key == "userId").Value;

            if (string.IsNullOrWhiteSpace(userIdCookie))
            {
                return(0);
            }
            var userIdString = EncryptDecryptExtension.DES3Decrypt(userIdCookie, DESKey);

            return(int.Parse(userIdString));
        }
예제 #3
0
        public async Task <RequestMessage> CheckLogin(string desstring)
        {
            var requestMessage = new RequestMessage();
            var jsonString     = string.Empty;

            try
            {
                //这里有点妖啊。
                //如果是url直接跳转过来的就不需要HttpUtility.UrlDecode
                //如果是ajax异步传过来的就需要HttpUtility.UrlDecode
                jsonString = EncryptDecryptExtension.DES3Decrypt(HttpUtility.UrlDecode(desstring), DESKey);
            }
            catch (Exception)
            {
                jsonString = EncryptDecryptExtension.DES3Decrypt(desstring, DESKey);
            }
            var dataUser = JsonConvert.DeserializeObject <User>(jsonString);

            RedisHelper reids = new RedisHelper(3);

            if (!await reids.KeyExistsAsync(dataUser.Mail, RedisTypePrefix.String))
            {
                requestMessage.IsSuccess = false;
                requestMessage.Message   = "激活链接已失效";
                return(requestMessage);//
            }

            var user = await _collectionDBCotext.Users.Where(t => t.Mail == dataUser.Mail).FirstOrDefaultAsync();

            if (user != null)//修改密码
            {
                user.Passwod = dataUser.Passwod;
            }
            else//新增用户
            {
                user = dataUser;
                _collectionDBCotext.Users.Add(user);
                await _collectionDBCotext.SaveChangesAsync();

                _collectionDBCotext.Types.Add(new Entities.Type()
                {
                    Name = "常用链接", UserId = user.Id, Sort = 1024
                });
            }
            await _collectionDBCotext.SaveChangesAsync();

            SaveCookie(user);

            await reids.DeleteKeyAsync(dataUser.Mail, RedisTypePrefix.String);//删除缓存,使验证过的邮件失效

            return(requestMessage);
        }
예제 #4
0
 /// <summary>
 /// 保存cookie
 /// </summary>
 /// <param name="user"></param>
 private void SaveCookie(User user)
 {
     Response.Cookies.Append("userName", user.Mail,
                             new CookieOptions()
     {
         Expires  = new DateTimeOffset(DateTime.Now.AddYears(1)),
         HttpOnly = true
     });
     //这里好像做了自动url编码
     Response.Cookies.Append("userId", EncryptDecryptExtension.DES3Encrypt(user.Id.ToString(), DESKey),
                             new CookieOptions()
     {
         Expires  = new DateTimeOffset(DateTime.Now.AddMonths(1)),
         HttpOnly = true
     });
 }
예제 #5
0
        public async Task <RequestMessage> Register(string mail, string passwod)
        {
            var requestMessage = new RequestMessage()
            {
                IsSuccess = true
            };
            var user = await _collectionDBCotext.Users
                       .Where(t => t.Mail == mail)
                       .Select(t => new { t.Id, t.Passwod })
                       .FirstOrDefaultAsync();

            if (user == null || user.Passwod != passwod)//注册 或 修改密码
            {
                requestMessage.IsSuccess = false;

                RedisHelper reids  = new RedisHelper(3);
                var         key    = mail;
                var         number = await reids.GetStringIncrAsync(key);

                if (number >= 3)
                {
                    requestMessage.Message = "请勿频繁注册,请查看垃圾邮件或换一个邮箱注册!";
                    return(requestMessage);
                }
                //30分钟内有效(标记邮件激活30分钟内有效)
                await reids.SetStringIncrAsync(key, TimeSpan.FromMinutes(30));

                if (user == null)
                {
                    requestMessage.Message = "第一次登录,验证链接已发邮箱。";
                }
                else
                {
                    requestMessage.Message = "您的密码有变更,验证链接已发邮箱。";
                }

                var data = JsonConvert.SerializeObject(new User()
                {
                    Mail = mail, Passwod = passwod
                });
                var         DESString = HttpUtility.UrlEncode(EncryptDecryptExtension.DES3Encrypt(data, DESKey));
                EmailHelper email     = new EmailHelper();
                email.MailToArray = new string[] { mail };
                var checkUrl = Request.Scheme + "://" + Request.Host.Value + "/Home/CheckLogin?desstring=" + DESString;
                email.MailSubject = "欢迎您注册 爱收藏";
                email.MailBody    = EmailHelper.TempBody(mail, "请复制打开链接(或者右键'在新标签页中打开'),完成验证。", "<a style='word-wrap: break-word;word-break: break-all;' href='" + checkUrl + "'>" + checkUrl + "</a>");
                email.Send(t =>
                {
                    //string aa = "成功";
                }, t =>
                {
                    //string aa = "失败";
                });
            }
            else
            {
                SaveCookie(new Entities.User()
                {
                    Id = user.Id, Mail = mail
                });
            }
            return(requestMessage);
        }