91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

四、Asp.Net MVC4.0開發CMS系統案例之密碼修改模塊開發

發布時間:2020-06-23 11:06:33 來源:網絡 閱讀:2000 作者:sujerhy 欄目:編程語言

    首先針對上一次的密碼登錄做一個補充說明,我們知道在控制器方法匯總使用過濾器[UserAuthorize]做為登錄驗證非常方便,驗證是否成功,然后進行頁面跳轉,如果驗證不成功我要給他們設定一個跳轉頁面,我們需要在config中做如下配置:

    <authentication mode="Forms">
      <forms loginUrl="~/SysComUser/UserLogin" timeout="2880" />
    </authentication>

修改loginUrl跳轉的頁面即可。

    用戶登錄密碼修改步驟如下:

    一、模板的定義

    /// <summary>
    /// 修改密碼
    /// </summary>
    [NotMapped]
    public class SysComUserPassword
    {
        /// <summary>
        /// 原密碼
        /// </summary>
        [Display(Name="原密碼",Description="6-20字符")]
        [Required(ErrorMessage="×")]
        [StringLength(20,MinimumLength=6,ErrorMessage="×")]
        [DataType(DataType.Password)]
        public string Password { get; set; }
        /// <summary>
        /// 新密碼
        /// </summary>
        [Display(Name="新密碼",Description="6-20字符")]
        [Required(ErrorMessage="×")]
        [StringLength(20,MinimumLength=6,ErrorMessage="×")]
        [DataType(DataType.Password)]       
        public string NewPassword { get; set; }
        /// <summary>
        /// 確認密碼
        /// </summary>
        [Display(Name = "確認密碼", Description = "再次輸入密碼")]
        [Compare("NewPassword", ErrorMessage = "×")]
        [DataType(DataType.Password)]
        public string RNewPassword { get; set; }
    }

    二、Contraller的Action編寫

       /// <summary>
        /// 修改密碼頁面
        /// </summary>
        /// <returns></returns>
        [UserAuthorize]
        public ActionResult UserChangePassword()
        {
            return View();
        }
        /// <summary>
        /// 修改密碼數據
        /// </summary>
        /// <param name="userPassword">修改密碼實體數據</param>
        /// <returns>URL</returns>
        [HttpPost]
        [UserAuthorize]//Extensionsh中對UserAuthorizeAttribute擴展重寫AuthorizeCore():表示這是一個只處理那些通過身份驗證的URL請求,如果沒有通過身份驗證就請求這個Action會被帶到登錄頁面。
        public ActionResult UserChangePassword(SysComUserPassword userPassword) 
        {
            int _rnum = userRpy.Authentication(LoginName, userPassword.Password);
            if (_rnum == 0)
            {
                //讀取用戶信息
                var _user = userRpy.Find(LoginName);
                if (_user == null)
                {
                    ModelState.AddModelError("Message", "該用戶已經失效,請重新登錄!");
                    return View();
                }
                else
                {
                    _user.Password = userPassword.NewPassword;
                    if (userRpy.Update(_user))
                    {
                        ModelState.AddModelError("Message", "修改成功!");
                        return View();
                    }
                    else
                    {
                        ModelState.AddModelError("Message", "更新數據庫失敗!");
                        return View();  
                    }
                }
            }
            else
            {
                ModelState.AddModelError("Message", "原密碼不正確,請重新輸入!");
                return View();    
            }
        }
        public string LoginName 
        {
            get 
            {
                HttpCookie _cookie = HttpContext.Request.Cookies["user"];
                if (_cookie == null) return "";
                else return _cookie["loginname"];
            }
        }

    在這里增加Public string LoginName屬性,主要用于從cookie中讀取登錄名稱。重要方法有以下幾個:

        1、 驗證原始的登錄名和密碼是否正確,盡管我們[UserAuthorize]做了一次身份驗證,但是這里目標是為了讓用戶重新輸入一次原始密碼進行驗證,否則是不允許修改的:

        userRpy.Authentication(LoginName, userPassword.Password);

        2、 讀取當前登錄名在數據庫的全部信息:

        var user = userRpy.Find(LoginName)

        3、將新設置的密碼賦給讀取后的實體對象,并作更新:

        _user.Password = userPassword.NewPassword;
        userRpy.Update(_user))

    三、業務邏輯層的方法定義

        1、修改一條用戶信息

        /// <summary>
        /// 修改一條用戶信息
        /// </summary>
        /// <param name="Tmodel">用戶數據模型</param>
        /// <returns>布爾值</returns>
        public override bool Update(SysComUser Tmodel)
        {
            //if (Tmodel == null) { return false; }
            //var _tmodel = HillstoneContext.SysComUser.FirstOrDefault(u => u.UserId == Tmodel.UserId);
            //if (_tmodel == null) { return false; }
            //_tmodel = Tmodel;
            //if (HillstoneContext.SaveChanges() > 0)
            dbContext.SysComUser.Attach(Tmodel);
            dbContext.Entry<SysComUser>(Tmodel).State = EntityState.Modified;
            if (dbContext.SaveChanges() > 0) return true;
            else return false;
        }

        1)、SysComUser.Attach(Tmodel);

        將給定實體附加到集的基礎上下文中,用于在上下文中重新填充數據庫中已存在的實體,如果與數據庫中的實體對比未有改變,則 Attach 不執行任何操作。

        2)、 dbContext.Entry<SysComUser>(Tmodel).State = EntityState.Modified;

        對象上的一個標量屬性已修改,但尚未調用 SaveChanges 方法。在保存更改后,對象狀態更改為 Unchanged。

    2、修改用戶密碼,需要從數據讀取用戶實體信息,將修改后的密碼賦給這個實體。讀取方法如下:

        /// <summary>
        /// 查找登錄用戶信息
        /// </summary>
        /// <param name="LoginName">登錄名</param>
        /// <returns>用戶信息</returns>
        public SysComUser Find(string LoginName)
        {
            var _user = dbContext.SysComUser.SingleOrDefault(u => u.LoginName == LoginName);
            return _user;
        }

     3、原始密碼驗證方法

        /// <summary>
        /// 用戶登錄身份驗證
        /// </summary>
        /// <param name="loginName">登錄名</param>
        /// <param name="password">密碼</param>
        /// <returns>0:登錄成功;1:登錄名不存在;2:密碼錯誤</returns>
        public int Authentication(string loginName, string password)
        {
            var _user = dbContext.SysComUser.SingleOrDefault(u => u.LoginName == loginName);
            if (_user == null) { return 1; }
            if (_user.Password != password) { return 2; }
            return 0;
        }

     四、VIEW頁面代碼,自動生成后做個簡單調整

@model Hillstone.Models.SysComUserPassword
@{
    ViewBag.Title = "修改密碼";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h3>修改密碼</h3>
@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>SysComUserPassword</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.Password)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Password)
            @Html.ValidationMessageFor(model => model.Password)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.NewPassword)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.NewPassword)
            @Html.ValidationMessageFor(model => model.NewPassword)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.RNewPassword)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.RNewPassword)
            @Html.ValidationMessageFor(model => model.RNewPassword)
        </div>
        <p>
            <input type="submit" value="Save" />@Html.ValidationMessage("Message")
        </p>
    </fieldset>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昆山市| 东城区| 潜江市| 宁蒗| 和政县| 城口县| 江北区| 卫辉市| 黎城县| 区。| 云和县| 花莲县| 贵港市| 白银市| 连州市| 石景山区| 安乡县| 察雅县| 关岭| 黄骅市| 建平县| 孝昌县| 衢州市| 五莲县| 涡阳县| 封丘县| 溧阳市| 女性| 普兰县| 济源市| 无锡市| 奉新县| 奉贤区| 沿河| 梁山县| 社会| 巫溪县| 海伦市| 香格里拉县| 新化县| 井陉县|