2015-01-12 167 views
-2

我創建的網站需要管理員帳戶爲用戶創建帳戶。如何讓這些用戶在第一次登錄後更改密碼?問題是,用戶將有一個通用密碼指定給他們,他們決定第一次登錄後,我希望他們不得不將他們的密碼更改爲不通用的東西。如何在首次登錄後讓用戶更改密碼?

這裏是我的登錄控制器

[AllowAnonymous] 
    public ActionResult Login(string returnUrl) 
    { 
     ViewBag.ReturnUrl = returnUrl; 
     return View(); 
    } 

    // 
    // POST: /Account/Login 
    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      var user = await UserManager.FindAsync(model.UserName, model.Password); 
      if (user != null) 
      { 
       await SignInAsync(user, model.RememberMe); 
       return RedirectToLocal(returnUrl); 
      } 

      else 
      { 
       ModelState.AddModelError("", "Invalid username or password."); 
      } 

     } 

我的登錄模式

public class LoginViewModel 
{ 
    [Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [Display(Name = "Remember me?")] 
    public bool RememberMe { get; set; } 



} 

和視圖

<div class="container"> 
    <div class="col-md-8"> 
     <section id="loginForm"> 
      @using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
      { 
       @Html.AntiForgeryToken() 
       <h4>Use a local account to log in.</h4> 
       <hr /> 
       @Html.ValidationSummary(true) 
       <div class="form-group"> 
        @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" }) 
        <div class="col-md-10"> 
         @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" }) 
         @Html.ValidationMessageFor(m => m.UserName) 
        </div> 
       </div> 
       <div class="form-group"> 
        @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" }) 
        <div class="col-md-10"> 
         @Html.PasswordFor(m => m.Password, new { @class = "form-control" }) 
         @Html.ValidationMessageFor(m => m.Password) 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-md-offset-2 col-md-10"> 
         <div class="checkbox"> 
          @Html.CheckBoxFor(m => m.RememberMe) 
          @Html.LabelFor(m => m.RememberMe) 
         </div> 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-md-offset-2 col-md-10"> 
         <input type="submit" value="Log in" class="btn btn-default" /> 
        </div> 
       </div> 
+4

你認爲你會怎麼做? – adv12

+0

就像Windows本身一樣;在數據庫中創建一個適當命名的列(比如'mustChangePassword'),然後檢查用戶登錄時是否設置了該列。如果設置了該列,則強制他們重置密碼。 – cybermonkey

+0

你有特定的問題,或者你只是想要如何解決問題的建議? – Dzyann

回答

5
  1. 在數據庫ChangePassword在創建新領域[User]表,當新用戶登錄化妝檢查該用戶是否有外地 ChangePassword = 1默認值 等於1
  2. 如果用戶應該更改密碼,在其他情況下將他重定向到頁面ChangePasswordPage重定向到默認頁面。
  3. 當他填寫新密碼並單擊Change Password按鈕時,將表中的ChangePassword標誌設置爲0並將其重定向到默認頁面。
+0

這幫了很多,謝謝! – Brian

+0

@BrianDelgado歡迎您,祝您網站好運。 – mybirthname

+2

這裏經常遇到的一個實際問題是,用戶通常在檢測到需要更改密碼時登錄。因此,不用更改密碼,只需將網站頁面粘貼到地址欄中即可完成業務而無需更改密碼。所以應該有一個很好的方法來檢測密碼在每一頁上都不會改變*。 –

0

強制他們更改密碼。只要他們沒有改變那裏的「一次性」密碼,就不能訪問該網站。讓他們鍵入2他們的新密碼,檢查他們是否相等,然後更新他們的密碼。 某處,可能在數據庫中,如果他們更改了其一次性密碼,則必須保持跟蹤。

0

如果你有一個數據庫字段跟蹤他最後一次登錄,這將是很容易實現這樣一個簡單的解決方案:

  1. 他們首次配備了通用密碼,上次登錄字段爲空。
  2. 您可以檢查最後登錄的字段是否爲空,它們從未更改過密碼,因此您可以強制它們更改它(您可以檢查新密碼是否與以前不一樣)並讓它們登錄。現在,用戶已將最後一次登錄日期設置爲非空值。他現在被設置爲使用新密碼登錄。
相關問題