1、登錄頁面代碼:
@{ ViewBag.Title = "會員登錄"; Layout = "~/Views/Shared/_LayoutDialog.cshtml"; } <div class="loginBox"> <div class="loginHead" style="color: white"> 會員登錄 </div> <form id="hgl-form" class="form-horizontal" action="@Url.Action("Login", "Home", new { area = string.Empty })" method="post"> <div class="control-group"> <label for="inputEmail">賬戶</label> <input type="text" name="account" id="inputEmail" class="validate[required]" /> </div> <div class="control-group"> <label for="inputPassword">密碼</label> <input type="password" name="password" id="inputPassword" class="validate[required]" /> </div> @*<div class="control-group" style="margin-bottom: 5px;"> <label class="checkbox"> <input type="checkbox" name="rememberMe" checked> 記住我</label> </div>*@ <div class="form-actions"> <button type="submit" class="btn btn-block">登錄</button> </div> </form> </div>
@section scripts{
<script type="text/javascript">
$(function () {
//表單提交
hgl.sumbit(function () {
location.href = '@Url.Action("Index", "SiteSet", new { area = "Setting" })';//登陸成功后跳轉到的頁面
});
})
</script>
}
2、登錄controller代碼:
//會員登錄 [HttpGet] public ActionResult Login() { return View(); } [HttpPost] public ActionResult Login(string account, string password) { var entity = AdminService.QueryDetailForAccount(account); if (entity == null) return JRFaild("all", "此賬戶不存在"); if (entity.Password != password.ToMD5()) return JRFaild("all", "賬戶密碼輸入錯誤,請重新輸入"); if (entity.Freezed == 1) return JRFaild("all", "此賬戶已被凍結,暫不能登錄,請聯系超級管理員"); var result = AdminService.Login(account, password, entity); if (result) { Session["account"] = account;
Session["guid"] = entity.Guid;
Session["username"] = entity.Name;
Session["password"] = password; return JRSuccess("登錄成功"); } return JRFaild("all", "登錄失敗,用戶名或密碼錯誤或賬戶不存在"); }
前面是登錄模塊的代碼;下面主要介紹 ActionFilterAttribute過濾器的使用
1、在項目中新建個Filter文件夾,在文件夾里面添加該過濾器類,命名為:BasicAuthAttribute.cs;此類需要繼承ActionFilterAttribute(關於ActionFilterAttribute大家可以按F12跳轉到該類的詳細介紹進行了解和使用);我在新建的BasicAuthAttribute.cs中使用了OnActionExecuting,該類代碼如下:如下代碼在使用的時候還需要添加引用:
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Security;
namespace Linkin.Manager.Filter { public class BasicAuthAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { var account = filterContext.HttpContext.Session["account"];
var password = filterContext.HttpContext.Session["password"];
if (account == null || password == null) { //用戶不登陸的時候跳轉到登錄頁面 filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Login", area = string.Empty })); } } } }
到此為止,過濾器已經寫好了,具體的項可以直接F12到起定義進行查看,可以看出當用戶不登陸的時候會跳轉到登錄頁面
2、此時需要到配置文件里的登錄配置是怎么配置的,打開web.config,找到節點<authentication mode="Forms"></authentication>查看配置,如果自己的登錄頁面跟web.config里面的配置一樣就不需要修改了,不一致的最好修改一下
<!--這里配置的是登錄頁面的權限配置--> <authentication mode="Forms"> <forms loginUrl="~/Home/Login" timeout="2880" /> </authentication>
3、這樣以后在controller里面就可以直接用該過濾器了,在要使用此項過濾器的controller里面直接加入下面的紅色字體,此時這樣還需要引入該文件的引用:using Linkin.Manager.Filter;(此引用要根據自己的項目的實際情況來添加)代碼如下:
[BasicAuthAttribute] public class AdminController : BasicController { [HttpGet] public ActionResult Index(string id, string key, int state = -1, int page = 1) { ViewBag.Id = id; ViewBag.Key = key; ViewBag.State = state; return View(AdminService.QueryPageList(id, key, state, page, 10)); } }
上面的代碼是將起放到了外面,也可以將起直接放到里面,如下:
public class AdminController : BasicController { [BasicAuthAttribute] [HttpGet] public ActionResult Index(string id, string key, int state = -1, int page = 1) { ViewBag.Id = id; ViewBag.Key = key; ViewBag.State = state; return View(AdminService.QueryPageList(id, key, state, page, 10)); } }
4、經過以上的步驟就弄好了,此時運行網站,在不登陸的時候,直接在瀏覽器的地址欄輸入http://localhost:2341/setting/admin,此時可以看到頁面跳轉到了登錄頁面