真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

三、Asp.NetMVC4.0開(kāi)發(fā)CMS系統(tǒng)案例之用戶(hù)登錄模塊開(kāi)發(fā)-創(chuàng)新互聯(lián)

   本次開(kāi)發(fā)是將三層架構(gòu)與MVC結(jié)合一起來(lái),我們看下面一個(gè)系統(tǒng)結(jié)構(gòu):

創(chuàng)新互聯(lián)是一家專(zhuān)注于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),慶元網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:慶元等地區(qū)。慶元做網(wǎng)站價(jià)格咨詢(xún):18980820575

   View ->Contraller->Model->BLL->DAL->SQLSERVER

            |        |        |

            ----------->Extensions----->FrameWork

            |

            __>Common

   Extensions包括擴(kuò)展類(lèi)功能,例如控件的再重新,權(quán)限的重新驗(yàn)證等。Common是一些公共×××。

   第一步:創(chuàng)建用戶(hù)登錄模型,可以與注冊(cè)模型類(lèi)(SysComUerRegister),用戶(hù)模型(SysComUser)寫(xiě)入同一個(gè)文件中。

    /// 
    /// 用戶(hù)登錄
    /// 
    ///子類(lèi)并不映射到任何數(shù)據(jù)庫(kù),加上一個(gè)不映射的屬性[NotMapped]
    [NotMapped]
    public class SysComUserLogin
    {

        [Display(Name = "登錄名", Description = "4-20個(gè)字符")]
        [Required(ErrorMessage = "×")]
        [StringLength(20, MinimumLength = 4, ErrorMessage = "×")]
        public string LoginName { get; set; }

        [Display(Name = "登錄密碼", Description = "6-20個(gè)字符")]
        [Required(ErrorMessage = "×")]
        [StringLength(20, MinimumLength = 6, ErrorMessage = "×")]
        [DataType(DataType.Password)]
        public new string Password { get; set; }

        [Display(Name = "驗(yàn)證碼", Description = "請(qǐng)輸入驗(yàn)證碼!")]
        [Required(ErrorMessage = "×")]
        [StringLength(4, MinimumLength = 4, ErrorMessage = "×")]
        public string VerificationCode { get; set; }
    }

   第二步:控制器Conrallers方法的實(shí)現(xiàn)。這里我們考慮有三個(gè):一個(gè)是默認(rèn)的登錄頁(yè)面方法,一個(gè)是HTTPPOST提交登錄數(shù)據(jù)的方法,還有一個(gè)注銷(xiāo)的方法。如下:

        /// 
        /// 用戶(hù)登錄頁(yè)面
        /// 
        /// 
        public ActionResult UserLogin()
        {
            return View();
        }

        /// 
        /// 用戶(hù)提交登錄
        /// 
        /// 
        /// 
        [HttpPost]
        public ActionResult UserLogin(SysComUserLogin userLogin)
        {
            //說(shuō)明:因?yàn)樵贛odels中,已經(jīng)實(shí)現(xiàn)用戶(hù)名和密碼驗(yàn)證規(guī)則,因?yàn)檫@里不需要重復(fù)判斷了,但驗(yàn)證碼除外,因?yàn)樗潜4鍿ession緩存中.
            if (String.IsNullOrEmpty(Session["VerificationCode"].ToString()))
            {
                ModelState.AddModelError("VerificationCode", "×");
                return View();
            }
            else if (Session["VerificationCode"].ToString() != userLogin.VerificationCode)
            {
                ModelState.AddModelError("VerificationCode", "×");
                return View();
            }
            else
            {
                if (userRpy.Authentication(userLogin.LoginName,userLogin.Password) == 0)
                {
                    HttpCookie _cookie = new HttpCookie("user");
                    _cookie.Values.Add("loginname", userLogin.LoginName);
                    _cookie.Values.Add("password", userLogin.Password);
                    Response.Cookies.Add(_cookie);
                    ModelState.AddModelError("Message", "登陸成功!!");
                    return View();
                }
                else
                {
                    ModelState.AddModelError("Message", "登陸失?。?);
                    return View();

                }
            }

        }


        /// 
        /// 注銷(xiāo)登錄信息
        /// 
        /// URL
        public ActionResult UserLoginOut()
        {
            HttpCookie _cookie = HttpContext.Request.Cookies["user"];
            if (_cookie != null)
            {
                //失效時(shí)間
                _cookie.Expires = DateTime.Now.AddHours(-1);
                Response.Cookies.Add(_cookie);
            }
            return View();
        }

  這里面用到一個(gè)Authentiction()用戶(hù)身份驗(yàn)證方法,所以需要在BLL業(yè)務(wù)層實(shí)現(xiàn)。

   第三步:BLL業(yè)務(wù)邏輯層方法實(shí)現(xiàn)

        /// 
        /// 用戶(hù)登錄身份驗(yàn)證
        /// 
        /// 登錄名
        /// 密碼
        /// 0:登錄成功;1:登錄名不存在;2:密碼錯(cuò)誤
        public int Authentication(string loginName, string password)
        {
            var _user = HillstoneContext.SysComUser.SingleOrDefault(u=>u.LoginName==loginName);
            if (_user == null) { return 1; }
            if (_user.Password != password) { return 2; }
            return 0;
        }

   第四步:所有涉及的東西都寫(xiě)完了,下面就是實(shí)現(xiàn)VIEW了。如下:

@model Hillstone.Models.SysComUserLogin

@{
    ViewBag.Title = "用戶(hù)登錄";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

UserLogin

@using (Html.BeginForm()) {     @Html.AntiForgeryToken()     @Html.ValidationSummary(true)     
        SysComUserLogin                      @Html.LabelFor(model => model.LoginName)         
                     @Html.EditorFor(model => model.LoginName)             @Html.ValidationMessageFor(model => model.LoginName)             @Html.DisplayDescriptionFor(model=>model.LoginName)         
                     @Html.LabelFor(model => model.Password)         
                     @Html.PasswordFor(model => model.Password)             @Html.DisplayDescriptionFor(model => model.LoginName)                               @Html.LabelFor(model => model.VerificationCode)                               @Html.TextBoxFor(model => model.VerificationCode)             @Html.ValidationMessageFor(model => model.VerificationCode)                             換一張                   

            @Html.ValidationMessage("Message")         

     }
    @Html.ActionLink("Back to List", "Index")
    function VerificationChange() {         $("#verificationcode").attr("src", "/SysComUser/VerificationCode?" + new Date());     }     @section Scripts {     @Scripts.Render("~/bundles/jqueryval") }

   第五部:其他考慮,我們登錄后,每次頁(yè)面跳轉(zhuǎn)或者刷新,需要確認(rèn)身份是否失效或者有效,那么問(wèn)題就來(lái)了,是不是在所有的頁(yè)面請(qǐng)求Contraller時(shí)候都要調(diào)用BLL中的Authencation()方法來(lái)驗(yàn)證呢?其實(shí)系統(tǒng)默認(rèn)有驗(yàn)證機(jī)制類(lèi)庫(kù),我們可以重新寫(xiě)這個(gè)接口,使用起來(lái)更加簡(jiǎn)潔方面,提交我們的開(kāi)發(fā)效率。所以我做個(gè)擴(kuò)展,在Extensions文件夾中新建UserAuthorizeAttribute.cs類(lèi)。如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Hillstone.BLL;

namespace System.Web.Mvc
{
    /// 
    /// 用戶(hù)權(quán)限驗(yàn)證
    /// 
    public class UserAuthorizeAttribute:AuthorizeAttribute
    {
        /// 
        ///  核心【驗(yàn)證用戶(hù)是否登錄】以后只要在需要登錄后才能操作的Action或Controller上加[UserAuthorize]就可實(shí)現(xiàn)驗(yàn)證是否已經(jīng)登錄了。
        /// 
        /// HTTP請(qǐng)求
        /// 布爾值:True or False
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (httpContext.Request.Cookies["user"] == null) return false;
            HttpCookie _cookie = httpContext.Request.Cookies["user"];

            string _loginName = _cookie["loginname"];
            string _password = _cookie["password"];

            httpContext.Response.Write("登錄名:" + _loginName);

            if (string.IsNullOrEmpty(_loginName) || string.IsNullOrEmpty(_password)) return false;

            SysComUserRepository userRsy = new SysComUserRepository();
            if (userRsy.Authentication(_loginName, _password) == 0) return true;
            else return false;
        }
    }
}

 繼承AuthorizeAttribute類(lèi)庫(kù),這里做AuthorizeCore方法重寫(xiě),里面調(diào)用BLL中的Authencation()登錄驗(yàn)證方法。 以后所有需要登錄之后才能操作的Contraller中,在Action之前加上[UserAuthorize]即可。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專(zhuān)業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買(mǎi)多久送多久。


網(wǎng)站名稱(chēng):三、Asp.NetMVC4.0開(kāi)發(fā)CMS系統(tǒng)案例之用戶(hù)登錄模塊開(kāi)發(fā)-創(chuàng)新互聯(lián)
文章起源:http://weahome.cn/article/jjgoj.html

在線咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部