Browse Source

评论留言优化

懒得勤快 4 years ago
parent
commit
9e61819159

+ 20 - 1
src/Masuit.MyBlogs.Core/Controllers/CommentController.cs

@@ -25,6 +25,7 @@ using System.IO;
 using System.Linq;
 using System.Text.RegularExpressions;
 using System.Threading.Tasks;
+using SameSiteMode = Microsoft.AspNetCore.Http.SameSiteMode;
 
 namespace Masuit.MyBlogs.Core.Controllers
 {
@@ -57,7 +58,10 @@ namespace Masuit.MyBlogs.Core.Controllers
 
             if (MailSender.HasBounced(dto.Email) || (!CurrentUser.IsAdmin && dto.Email.EndsWith(CommonHelper.SystemSettings["Domain"])))
             {
-                return ResultData(null, false, "邮箱地址错误,请使用有效的邮箱地址!");
+                Response.Cookies.Delete("Email");
+                Response.Cookies.Delete("QQorWechat");
+                Response.Cookies.Delete("NickName");
+                return ResultData(null, false, "邮箱地址错误,请刷新页面后重新使用有效的邮箱地址!");
             }
 
             Post post = await PostService.GetByIdAsync(dto.PostId) ?? throw new NotFoundException("评论失败,文章未找到");
@@ -102,6 +106,21 @@ namespace Masuit.MyBlogs.Core.Controllers
                 return ResultData(null, false, "评论失败");
             }
 
+            Response.Cookies.Append("Email", comment.Email, new CookieOptions()
+            {
+                Expires = DateTimeOffset.Now.AddYears(1),
+                SameSite = SameSiteMode.Lax
+            });
+            Response.Cookies.Append("QQorWechat", comment.QQorWechat + "", new CookieOptions()
+            {
+                Expires = DateTimeOffset.Now.AddYears(1),
+                SameSite = SameSiteMode.Lax
+            });
+            Response.Cookies.Append("NickName", comment.NickName, new CookieOptions()
+            {
+                Expires = DateTimeOffset.Now.AddYears(1),
+                SameSite = SameSiteMode.Lax
+            });
             CommentFeq.AddOrUpdate("Comments:" + ClientIP, 1, i => i + 1, 5);
             CommentFeq.Expire("Comments:" + ClientIP, TimeSpan.FromMinutes(1));
             var emails = new HashSet<string>();

+ 21 - 2
src/Masuit.MyBlogs.Core/Controllers/MsgController.cs

@@ -14,6 +14,7 @@ using Masuit.Tools.Html;
 using Masuit.Tools.Logging;
 using Masuit.Tools.Strings;
 using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Net.Http.Headers;
 using System;
@@ -23,6 +24,7 @@ using System.IO;
 using System.Linq;
 using System.Text.RegularExpressions;
 using System.Threading.Tasks;
+using SameSiteMode = Microsoft.AspNetCore.Http.SameSiteMode;
 
 namespace Masuit.MyBlogs.Core.Controllers
 {
@@ -133,7 +135,10 @@ namespace Masuit.MyBlogs.Core.Controllers
 
             if (MailSender.HasBounced(dto.Email) || (!CurrentUser.IsAdmin && dto.Email.EndsWith(CommonHelper.SystemSettings["Domain"])))
             {
-                return ResultData(null, false, "邮箱地址错误,请使用有效的邮箱地址!");
+                Response.Cookies.Delete("Email");
+                Response.Cookies.Delete("QQorWechat");
+                Response.Cookies.Delete("NickName");
+                return ResultData(null, false, "邮箱地址错误,请刷新页面后重新使用有效的邮箱地址!");
             }
 
             dto.Content = dto.Content.Trim().Replace("<p><br></p>", string.Empty);
@@ -172,7 +177,21 @@ namespace Masuit.MyBlogs.Core.Controllers
             {
                 return ResultData(null, false, "留言发表失败!");
             }
-
+            Response.Cookies.Append("Email", msg.Email, new CookieOptions()
+            {
+                Expires = DateTimeOffset.Now.AddYears(1),
+                SameSite = SameSiteMode.Lax
+            });
+            Response.Cookies.Append("QQorWechat", msg.QQorWechat + "", new CookieOptions()
+            {
+                Expires = DateTimeOffset.Now.AddYears(1),
+                SameSite = SameSiteMode.Lax
+            });
+            Response.Cookies.Append("NickName", msg.NickName, new CookieOptions()
+            {
+                Expires = DateTimeOffset.Now.AddYears(1),
+                SameSite = SameSiteMode.Lax
+            });
             MsgFeq.AddOrUpdate("Comments:" + ClientIP, 1, i => i + 1, 5);
             MsgFeq.Expire("Comments:" + ClientIP, TimeSpan.FromMinutes(1));
             var email = CommonHelper.SystemSettings["ReceiveEmail"];

+ 30 - 27
src/Masuit.MyBlogs.Core/Views/Msg/Index.cshtml

@@ -3,6 +3,7 @@
     ViewBag.Title = "留言板";
     Layout = "~/Views/Shared/_Layout.cshtml";
     string cid = string.IsNullOrEmpty(Context.Request.Query["cid"]) ? "0" : Context.Request.Query["cid"].ToString();
+    string hidden = string.IsNullOrEmpty(Context.Request.Cookies["Email"]) ? "" : "hidden";
 }
 <link href="~/Assets/layui/css/layui.min.css" rel="stylesheet" />
 <script src="~/Assets/layui/layui.all.js"></script>
@@ -22,13 +23,13 @@
         @Html.AntiForgeryToken()
         <input type="hidden" name="OperatingSystem" id="OperatingSystem" />
         <input type="hidden" name="Browser" id="Browser" />
-        <div class="row">
+        <div class="row @hidden">
             <div class="col-md-4">
                 <div class="input-group">
                     <span class="input-group-addon">
                         <label for="name">昵称:</label>
                     </span>
-                    <input type="text" class="form-control" name="NickName" id="name" required placeholder="昵称">
+                    <input type="text" class="form-control" name="NickName" id="name" required placeholder="昵称" value="@Context.Request.Cookies["NickName"]">
                 </div>
             </div>
             <div class="col-md-4">
@@ -36,7 +37,7 @@
                     <span class="input-group-addon">
                         <label for="email">邮箱:</label>
                     </span>
-                    <input type="email" class="form-control" name="Email" id="email" required placeholder="留下您的真实邮箱,以方便接收回复">
+                    <input type="email" class="form-control" name="Email" id="email" required placeholder="留下您的真实邮箱,以方便接收回复" value="@Context.Request.Cookies["Email"]">
                 </div>
             </div>
             <div class="col-md-4">
@@ -44,14 +45,14 @@
                     <span class="input-group-addon">
                         <label for="chat">QQ/微信:</label>
                     </span>
-                    <input type="text" class="form-control" name="QQorWechat" id="chat" placeholder="QQ或微信(可选)">
+                    <input type="text" class="form-control" name="QQorWechat" id="chat" placeholder="QQ或微信(可选)" value="@Context.Request.Cookies["QQorWechat"]">
                 </div>
             </div>
         </div>
         <div class="form-group overlay animated fadeInDown" style="margin-bottom: 0px !important;">
             <textarea class="layui-textarea" id="layedit" name="Content" style="height: 200px"></textarea>
         </div>
-        <input type="checkbox" name="Agree" id="aggrement1" value="true" /><label for="aggrement1">我已接受<a asp-controller="Misc" asp-action="agreement" target="_blank">《留言须知》</a></label>
+        <label><input type="checkbox" name="Agree" value="true" />我已阅读<a asp-controller="Misc" asp-action="agreement" target="_blank">《留言须知》</a></label>
         <div class="form-group">
             <div class="col-xs-12">
                 <button type="submit" class="btn btn-info btn-lg">
@@ -74,37 +75,39 @@
             @Html.AntiForgeryToken()
             <input type="hidden" name="OperatingSystem" id="OperatingSystem2" />
             <input type="hidden" name="Browser" id="Browser2" />
-            <div class="input-group">
-                <span class="input-group-addon">
-                    <label for="name">昵称:</label>
-                </span>
-                <input type="text" class="form-control" name="NickName" id="name2" required placeholder="昵称">
-            </div>
-            <div class="input-group">
-                <span class="input-group-addon">
-                    <label for="email">邮箱:</label>
-                </span>
-                <input type="email" class="form-control" name="Email" id="email2" required placeholder="留下您的真实邮箱,以方便接收回复">
-            </div>
-            <div class="input-group">
-                <span class="input-group-addon">
-                    <label for="chat">QQ/微信:</label>
-                </span>
-                <input type="text" class="form-control animated pulse" name="QQorWechat" id="chat2" placeholder="QQ或微信(可选)">
+            <div class="@hidden">
+                <div class="input-group">
+                    <span class="input-group-addon">
+                        <label for="name">昵称:</label>
+                    </span>
+                    <input type="text" class="form-control" name="NickName" id="name2" required placeholder="昵称" value="@Context.Request.Cookies["NickName"]">
+                </div>
+                <div class="input-group">
+                    <span class="input-group-addon">
+                        <label for="email">邮箱:</label>
+                    </span>
+                    <input type="email" class="form-control" name="Email" id="email2" required placeholder="留下您的真实邮箱,以方便接收回复" value="@Context.Request.Cookies["Email"]">
+                </div>
+                <div class="input-group">
+                    <span class="input-group-addon">
+                        <label for="chat">QQ/微信:</label>
+                    </span>
+                    <input type="text" class="form-control animated pulse" name="QQorWechat" id="chat2" placeholder="QQ或微信(可选)" value="@Context.Request.Cookies["QQorWechat"]">
+                </div>
             </div>
             <input type="hidden" value="" id="uid" name="ParentId" />
             <div class="form-group overlay">
                 <textarea class="layui-textarea" id="layedit2" name="Content" style="height: 80px"></textarea>
             </div>
-            <input type="checkbox" name="Agree" id="aggrement2" value="true" /><label for="aggrement2">我已接受<a asp-controller="Misc" asp-action="agreement" target="_blank">《留言须知》</a></label>
+            <label><input type="checkbox" name="Agree" value="true" />我已阅读<a asp-controller="Misc" asp-action="agreement" target="_blank">《留言须知》</a></label>
             <div class="form-group">
                 <div class="col-xs-12">
                     <div class="btn-group">
-                        <button type="submit" class="btn btn-info btn-lg">
-                            提交回复
+                        <button type="submit" class="btn btn-info">
+                            提交
                         </button>
-                        <button type="button" class="btn-cancel btn btn-danger btn-lg">
-                            取消回复
+                        <button type="button" class="btn-cancel btn btn-danger">
+                            取消
                         </button>
                     </div>
                 </div>

+ 31 - 27
src/Masuit.MyBlogs.Core/Views/Post/Details.cshtml

@@ -14,6 +14,7 @@
     Layout = "~/Views/Shared/_Layout.cshtml";
     string[] colors = { "success", "info", "primary", "warning", "danger", "default", "primary" };
     string cid = string.IsNullOrEmpty(Context.Request.Query["cid"]) ? "0" : Context.Request.Query["cid"].ToString();
+    string hidden = string.IsNullOrEmpty(Context.Request.Cookies["Email"]) ? "" : "hidden";
     Advertisement ad = ViewBag.Ads;
 }
 <environment names="Development">
@@ -106,6 +107,7 @@
                                 {
                                     <p class="text-focus text-center">该文章已经超过1年未更新,可能无法为您提供及时准确的资讯,请根据当下实际情况,酌情参考本文内容。</p>
                                 }
+                            </div>
                         </header>
                         <article class="article" id="article">
                             @Html.Raw(Model.Content.ReplaceImgAttribute(Model.Title))
@@ -275,13 +277,13 @@
                                 <input type="hidden" name="PostId" value="@Model.Id" />
                                 <input type="hidden" id="OperatingSystem" name="OperatingSystem" />
                                 <input type="hidden" name="Browser" id="Browser" />
-                                <div class="row">
+                                <div class="row @hidden">
                                     <div class="col-md-4">
                                         <div class="input-group">
                                             <span class="input-group-addon">
                                                 <label for="name">昵称:</label>
                                             </span>
-                                            <input type="text" class="form-control" name="NickName" id="name" required placeholder="昵称">
+                                            <input type="text" class="form-control" name="NickName" id="name" required placeholder="昵称" value="@Context.Request.Cookies["NickName"]">
                                         </div>
                                     </div>
                                     <div class="col-md-4">
@@ -289,7 +291,7 @@
                                             <span class="input-group-addon">
                                                 <label for="email">邮箱:</label>
                                             </span>
-                                            <input type="email" class="form-control" name="Email" id="email" required placeholder="留下您的真实邮箱,以方便接收回复">
+                                            <input type="email" class="form-control" name="Email" id="email" required placeholder="留下您的真实邮箱,以方便接收回复" value="@Context.Request.Cookies["Email"]">
                                         </div>
                                     </div>
                                     <div class="col-md-4">
@@ -297,14 +299,14 @@
                                             <span class="input-group-addon">
                                                 <label for="chat">QQ/微信:</label>
                                             </span>
-                                            <input type="text" class="form-control" name="QQorWechat" id="chat" placeholder="QQ或微信(可选)">
+                                            <input type="text" class="form-control" name="QQorWechat" id="chat" placeholder="QQ或微信(可选)" value="@Context.Request.Cookies["QQorWechat"]">
                                         </div>
                                     </div>
                                 </div>
                                 <div class="form-group overlay animated fadeInDown" style="margin-bottom: 0px !important;">
                                     <textarea class="layui-textarea" id="layedit" name="Content" style="height: 100px"></textarea>
                                 </div>
-                                <input type="checkbox" name="Agree" id="aggrement" value="true" /><label for="aggrement">我已接受<a asp-controller="Misc" asp-action="agreement" target="_blank">《评论须知》</a></label>
+                                <label><input type="checkbox" name="Agree" value="true" />我已阅读<a asp-controller="Misc" asp-action="agreement" target="_blank">《评论须知》</a></label>
                                 <div class="form-group">
                                     <div class="col-xs-6">
                                         <button type="submit" class="btn btn-info btn-lg">提交</button>
@@ -344,37 +346,39 @@
             <input type="hidden" name="PostId" id="postId" value="@Model.Id" />
             <input type="hidden" name="OperatingSystem" id="OperatingSystem2" />
             <input type="hidden" name="Browser" id="Browser2" />
-            <div class="input-group">
-                <span class="input-group-addon">
-                    <label for="name">昵称:</label>
-                </span>
-                <input type="text" class="form-control" name="NickName" id="name2" required placeholder="昵称">
-            </div>
-            <div class="input-group">
-                <span class="input-group-addon">
-                    <label for="email">邮箱:</label>
-                </span>
-                <input type="email" class="form-control" name="Email" id="email2" required placeholder="留下您的真实邮箱,以方便接收回复">
-            </div>
-            <div class="input-group">
-                <span class="input-group-addon">
-                    <label for="chat">QQ/微信:</label>
-                </span>
-                <input type="text" class="form-control" name="QQorWechat" id="chat2" placeholder="QQ或微信(可选)">
+            <div class="@hidden">
+                <div class="input-group">
+                    <span class="input-group-addon">
+                        <label for="name">昵称:</label>
+                    </span>
+                    <input type="text" class="form-control" name="NickName" id="name2" required placeholder="昵称" value="@Context.Request.Cookies["NickName"]">
+                </div>
+                <div class="input-group">
+                    <span class="input-group-addon">
+                        <label for="email">邮箱:</label>
+                    </span>
+                    <input type="email" class="form-control" name="Email" id="email2" required placeholder="留下您的真实邮箱,以方便接收回复" value="@Context.Request.Cookies["Email"]">
+                </div>
+                <div class="input-group">
+                    <span class="input-group-addon">
+                        <label for="chat">QQ/微信:</label>
+                    </span>
+                    <input type="text" class="form-control" name="QQorWechat" id="chat2" placeholder="QQ或微信(可选)" value="@Context.Request.Cookies["QQorWechat"]">
+                </div>
             </div>
             <input type="hidden" value="" id="uid" name="ParentId" />
             <div class="form-group overlay animated fadeInDown">
                 <textarea class="layui-textarea" id="layedit2" name="Content" style="height: 80px"></textarea>
             </div>
-            <input type="checkbox" name="Agree" id="aggrement2" value="true" /><label for="aggrement2">我已接受<a asp-controller="Misc" asp-action="agreement" target="_blank">《评论须知》</a></label>
+            <label><input type="checkbox" name="Agree" value="true" />我已阅读<a asp-controller="Misc" asp-action="agreement" target="_blank">《评论须知》</a></label>
             <div class="form-group">
                 <div class="col-xs-12">
                     <div class="btn-group">
-                        <button type="submit" class="btn btn-info btn-lg">
-                            提交回复
+                        <button type="submit" class="btn btn-info">
+                            提交
                         </button>
-                        <button type="button" class="btn-cancel btn btn-danger btn-lg">
-                            取消回复
+                        <button type="button" class="btn-cancel btn btn-danger">
+                            取消
                         </button>
                     </div>
                 </div>

+ 3 - 3
src/Masuit.MyBlogs.Core/appsettings.json

@@ -14,8 +14,8 @@
     },
     "ConnString": "Server=127.0.0.1;Port=3306;Database=MyBlogs;Uid=root;Pwd=;Charset=utf8mb4", // 数据库连接字符串
     "Redis": "127.0.0.1:6379,allowadmin=true,connectTimeout=20000,connectRetry=1,responseTimeout=20000,syncTimeout=10000", // Redis连接字符串
-    "EmailDomainWhiteList": "masuit.com,ldqk.org,\\d{6,}@qq.com,\\w{6,}@163.com,\\w{6,}@gmail.com,\\w{6,}@outlook.com", // 邮箱域名白名单,英文逗号分隔,支持正则表达式
-    "EmailDomainBlockList": "\\w{1,5}@qq.com,\\w{1,5}@163.com,\\w{1,5}@gmail.com,\\w{1,5}@outlook.com", // 邮箱域名黑名单,英文逗号分隔,支持正则表达式
+    "EmailDomainWhiteList": "\\d{6,12}@qq.com,\\w{6,32}@163.com,\\w{6,32}@gmail.com,\\w{6,36}@outlook.com", // 邮箱域名白名单,英文逗号分隔,支持正则表达式
+    "EmailDomainBlockList": "^\\D+.*@qq.com,^\\w{1,5}@163.com,^\\w{1,5}@gmail.com,^\\w{1,5}@outlook.com,bc.com,linshiyouxiang.net,ww.com,@q.com,^.{1,12}$", // 邮箱域名黑名单,英文逗号分隔,支持正则表达式
     "UseRewriter": "NonWww", //NonWww:重定向到不带www的域名,WWW:重定向到带www的域名
     "BaiduAK": "你的BaiduAK", // 百度开放平台AppKey,用于获取IP地址信息的api
     "TrueClientIPHeader": "CF-Connecting-IP",
@@ -78,5 +78,5 @@
         "Type": "Global",
         "AccountName": "[email protected]",
         "DominName": "masuit-my.sharepoint.com"
-    } 
+    }
 }

+ 1 - 15
src/Masuit.MyBlogs.Core/wwwroot/Scripts/global/article.js

@@ -73,12 +73,6 @@
 			});
         });
 	});
-	var user = JSON.parse(localStorage.getItem("user"));
-	if (user) {
-		$("[name='NickName']").val(user.NickName||$("[name='NickName']").val());
-		$("[name='Email']").val(user.Email||$("[name='Email']").val());
-		$("[name='QQorWechat']").val(user.QQorWechat);
-	}
 
 	bindReplyBtn();//绑定回复按钮事件
 	bindVote();//绑定文章投票按钮
@@ -167,8 +161,7 @@
 			loadingDone();
 			return;
 		}
-
-		localStorage.setItem("user",  JSON.stringify(formData));
+		
 		window.post("/comment/submit", formData, function(data) {
 			loadingDone();
 			if (data.Success) {
@@ -206,7 +199,6 @@
  */
 function submitComment(_this) {
 	loading();
-	localStorage.setItem("user", JSON.stringify($(_this).serializeObject()));
 	window.post("/comment/submit", $(_this).serializeObject(), function(data) {
 		loadingDone();
 		if (data.Success) {
@@ -240,12 +232,6 @@ function bindReplyBtn() {
 	$(".msg-list article .panel-body a").on("click", function(e) {
 		e.preventDefault();
 		loadingDone();
-		var user = JSON.parse(localStorage.getItem("user"));
-		if (user) {
-		    $("[name='NickName']").val(user.NickName||$("[name='NickName']").val());
-		    $("[name='Email']").val(user.Email||$("[name='Email']").val());
-		    $("[name='QQorWechat']").val(user.QQorWechat);
-		}
 		var href = $(this).attr("href");
 		var uid = href.substring(href.indexOf("uid") + 4);
 		$("#uid").val(uid);

+ 1 - 14
src/Masuit.MyBlogs.Core/wwwroot/Scripts/global/leavemsg.js

@@ -8,12 +8,7 @@
 	$("#OperatingSystem").val(DeviceInfo.OS.toString());
     $("#Browser").val(DeviceInfo.browserInfo.Name+" "+DeviceInfo.browserInfo.Version);
 	window.getmsgs();
-	var user = JSON.parse(localStorage.getItem("user"));
-	if (user) {
-		$("[name='NickName']").val(user.NickName);
-		$("[name='Email']").val(user.Email);
-		$("[name='QQorWechat']").val(user.QQorWechat);
-	}
+	
     //异步提交留言表单开始
     $("#msg-form").on("submit", function(e) {
         e.preventDefault();
@@ -102,7 +97,6 @@
             loadingDone();
             return;
         }
-		localStorage.setItem("user", JSON.stringify($(this).serializeObject()));
 		window.post("/Msg/submit", $(this).serializeObject(), (data) => {
             loadingDone();
             if (data && data.Success) {
@@ -133,7 +127,6 @@
  */
 function submitComment(_this) {
     loading();
-	localStorage.setItem("user", JSON.stringify($(_this).serializeObject()));
     window.post("/Msg/submit", $(_this).serializeObject(), (data) => {
         loadingDone();
         if (data && data.Success) {
@@ -161,12 +154,6 @@ function bindReplyBtn() {
 	$(".msg-list article .panel-body a").on("click", function (e) {
 		e.preventDefault();
 		loadingDone();
-		var user = JSON.parse(localStorage.getItem("user"));
-		if (user) {
-			$("[name='NickName']").val(user.NickName);
-			$("[name='Email']").val(user.Email);
-			$("[name='QQorWechat']").val(user.QQorWechat);
-		}
 		var href = $(this).attr("href");
 		var uid = href.substring(href.indexOf("uid") + 4);
 		$("#uid").val(uid);

File diff suppressed because it is too large
+ 1 - 1
src/Masuit.MyBlogs.Core/wwwroot/Scripts/global/leavemsg.min.js


Some files were not shown because too many files changed in this diff