Exemple #1
0
        /// <summary>
        /// 生成Token
        /// </summary>
        /// <param name="mo">授权用户信息</param>
        /// <returns></returns>
        public static string TokenMake(UserInfo mo)
        {
            var key = GlobalTo.GetValue("VerifyCode:Key");

            var token = CalcTo.EnDES(new
            {
                mo = new
                {
                    mo.UserId,
                    mo.UserName,
                    mo.Nickname,
                    mo.UserSign,
                    mo.UserPhoto
                },
                expired = DateTime.Now.AddDays(10).ToTimestamp()
            }.ToJson(), key);

            return(token);
        }
        /// <summary>
        /// 验证
        /// </summary>
        /// <returns></returns>
        public IActionResult Verify()
        {
            var vm = new ActionResultVM();

            var id = RouteData.Values["id"]?.ToString().ToUpper();

            if (!string.IsNullOrWhiteSpace(id))
            {
                var uinfo = new UserAuthAid(HttpContext).Get();

                switch (id.ToLower())
                {
                //发送验证邮箱
                case "send":
                {
                    if (User.Identity.IsAuthenticated)
                    {
                        using var db = new ContextBase();
                        var usermo = db.UserInfo.Find(uinfo.UserId);
                        if (usermo.UserMailValid == 1)
                        {
                            vm.msg = "邮箱已经完成验证";
                        }
                        else if (string.IsNullOrWhiteSpace(usermo.UserMail))
                        {
                            vm.msg = "邮箱不能为空";
                        }
                        else
                        {
                            var cacheKey = "Global_VerifyMail_" + usermo.UserMail;
                            var issend   = CacheTo.Get(cacheKey) as bool?;
                            if (issend == true)
                            {
                                vm.msg = "1分钟内只能发送一次验证信息";
                            }
                            else
                            {
                                var tml = FileTo.ReadText(GlobalTo.WebRootPath + "/lib/mailchecker/", "list.txt");
                                if (tml.Contains(usermo.UserMail.Split('@').LastOrDefault()))
                                {
                                    vm.msg = "该邮箱已被屏蔽";
                                }
                                else
                                {
                                    //发送验证

                                    var ToMail = usermo.UserMail;

                                    var vjson = new
                                    {
                                        mail = ToMail,
                                        ts   = DateTime.Now.ToTimestamp()
                                    }.ToJson();
                                    var vcode = CalcTo.EnDES(vjson, GlobalTo.GetValue("VerifyCode:Key")).ToLower();

                                    var VerifyLink = string.Format(GlobalTo.GetValue("VerifyCode:Url"), vcode);

                                    var txt = FileTo.ReadText(GlobalTo.WebRootPath + "/template/", "sendmailverify.html");
                                    txt = txt.Replace("@ToMail@", ToMail).Replace("@VerifyLink@", VerifyLink);

                                    vm = MailAid.Send(ToMail, "验证你的邮箱", txt);

                                    if (vm.code == 200)
                                    {
                                        vm.msg = "已发送成功";
                                        CacheTo.Set(cacheKey, true, 60, false);
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        vm.msg = "请登录";
                    }
                }
                break;

                //验证邮箱
                default:
                    try
                    {
                        var vjson = CalcTo.DeDES(id, GlobalTo.GetValue("VerifyCode:Key")).ToJObject();
                        if (DateTime.Now.ToTimestamp() - Convert.ToInt32(vjson["ts"]) < 60 * 5)
                        {
                            var mail = vjson["mail"].ToString();
                            if (string.IsNullOrWhiteSpace(mail))
                            {
                                vm.msg = "邮件地址有误";
                            }
                            else
                            {
                                using var db = new ContextBase();
                                var usermo = db.UserInfo.FirstOrDefault(x => x.UserMail == mail);
                                if (usermo != null)
                                {
                                    if (usermo.UserMailValid == 1)
                                    {
                                        vm.msg = "已验证,勿重复验证";
                                    }
                                    else
                                    {
                                        usermo.UserMailValid = 1;

                                        db.UserInfo.Update(usermo);

                                        int num = db.SaveChanges();

                                        vm.Set(num > 0);
                                        if (vm.code == 200)
                                        {
                                            vm.msg = "恭喜你,验证成功";
                                        }
                                    }
                                }
                                else
                                {
                                    vm.msg = "邮件地址无效";
                                }
                            }
                        }
                        else
                        {
                            vm.msg = "链接已过期(5分钟内有效)";
                        }
                    }
                    catch (Exception)
                    {
                        vm.msg = "链接已失效";
                    }
                    break;
                }
            }
            else
            {
                vm.msg = "缺失验证码信息";
            }

            return(View(vm));
        }