.net core 1.0 中的asp.net identity 基本使用(一)


使用用戶管理器之用戶注冊

 

配置數據庫在appsettings.json,系統默認生成的是連接到sqlserver服務中的數據庫。如果想連接到.mdb文件上(便攜型數據庫)請參照我的另一篇博文《.net 和 core 數據庫連接字符串 》中關於《Asp.net Core 數據庫離線文件的連接(特別感謝“張不水”兄的大力幫助。)》的部分。

 

1、修改密碼強度和用戶郵箱驗證規則:(微軟官方示例采用的是后面的方式)

打開Startup.cs,在public class Startup{}內找public void ConfigureServices(IServiceCollection services){}修改services.AddIdentity<ApplicationUser, IdentityRole>()為如下代碼:

 1             services.AddIdentity<ApplicationUser, IdentityRole>(options =>
 2             {
 3                 // 配置身份選項
 4                 // 密碼配置
 5                 options.Password.RequireDigit = false;//是否需要數字(0-9).
 6                 options.Password.RequiredLength = 6;//設置密碼長度最小為6
 7                 options.Password.RequireNonAlphanumeric = false;//是否包含非字母或數字字符。
 8                 options.Password.RequireUppercase = false;//是否需要大寫字母(A-Z).
 9                 options.Password.RequireLowercase = false;//是否需要小寫字母(a-z).
10 
11                 // 鎖定設置
12                 options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);//賬戶鎖定時長30分鍾
13                 options.Lockout.MaxFailedAccessAttempts = 10;//10次失敗的嘗試將賬戶鎖定
14 
15                 // Cookie常用設置
16                 options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(150);//Cookie 保持有效的時間150天。
17                 options.Cookies.ApplicationCookie.LoginPath = "/Account/LogIn";//在進行登錄時自動重定向。
18                 options.Cookies.ApplicationCookie.LogoutPath = "/Account/LogOff";//在進行注銷時自動重定向。
19 
20                 //cookie擴展設置(通常不用)
21                 options.Cookies.ApplicationCookie.CookieName = "YouAppCookieName";//用於保持身份的 Cookie 名稱。 默認值為“.AspNet.Cookies”。 
22                 options.Cookies.ApplicationCookie.AccessDeniedPath = "/Account/AccessDenied";//被拒絕訪問或路徑無效后的重定向。
23                 options.Cookies.ApplicationCookie.AutomaticAuthenticate = true;//自動認證
24                 options.Cookies.ApplicationCookie.AuthenticationScheme = Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.AuthenticationScheme;//選定認證方案的名稱。
25                 options.Cookies.ApplicationCookie.ReturnUrlParameter = Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.ReturnUrlParameter;//登陸或退出后執行動作返回到原來的地址。
26 
27                 // 用戶設置
28                 options.User.RequireUniqueEmail = true; //是否Email地址必須唯一
29             })

 或者在AddDefaultTokenProviders();的后面   services.AddMvc();前面添加如下代碼(微軟官方示例代碼形式,推薦)

 1 services.Configure<IdentityOptions>(options =>
 2             {
 3                 // 配置身份選項
 4                 // 密碼配置
 5                 options.Password.RequireDigit = false;//是否需要數字(0-9).
 6                 options.Password.RequiredLength = 6;//設置密碼長度最小為6
 7                 options.Password.RequireNonAlphanumeric = false;//是否包含非字母或數字字符。
 8                 options.Password.RequireUppercase = false;//是否需要大寫字母(A-Z).
 9                 options.Password.RequireLowercase = false;//是否需要小寫字母(a-z).
10 
11                 // 鎖定設置
12                 options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);//賬戶鎖定時長30分鍾
13                 options.Lockout.MaxFailedAccessAttempts = 10;//10次失敗的嘗試將賬戶鎖定
14 
15                 // Cookie常用設置
16                 options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(150);//Cookie 保持有效的時間150天。
17                 options.Cookies.ApplicationCookie.LoginPath = "/Account/LogIn";//在進行登錄時自動重定向。
18                 options.Cookies.ApplicationCookie.LogoutPath = "/Account/LogOff";//在進行注銷時自動重定向。
19 
20                 // 用戶設置
21                 options.User.RequireUniqueEmail = true; //是否Email地址必須唯一
22             });

 

2、打開Controllers目錄下的AccountController.cs

找到 public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null) (110行)這下面的var user = new ApplicationUser { UserName = model.Email, Email = model.Email };(115行)這里兩個參數都是綁定的email。

改為var user = new ApplicationUser { UserName = model.UserName, Email = model.Email };

更改后vs會提示下紅波浪線(錯誤),選擇糾錯為“生成屬性”的哪一項。注意:自動生成會是public string UserName { get; internal set; } 必須把internal set改為set,否則后期無法獲取到值。

  

3、修改用戶注冊的數據模型:修改Models文件夾下AccountViewModels目錄下RegisterViewModel.cs模型內的public class RegisterViewModel 中添加   public string UserName { get; set; },好了在上面堆你想要的規則吧。

1         [Required]
2         [StringLength(20, ErrorMessage = "{0} 必須至少包含 {2} 個字符,最多20個字符。", MinimumLength = 6)]
3         [Display(Name = "用戶賬號")]
4         [DataType(DataType.Text)]
5         [RegularExpression("^[a-zA-Z0-9_]{6,20}$", ErrorMessage = "用戶名由字母或數字組成。")]
6         public string UserName { get; set; }

 為方便大家這是修改好的代碼

 1 public class RegisterViewModel
 2     {
 3         [Required]
 4         [EmailAddress]
 5         [Display(Name = "電子信箱")]
 6         public string Email { get; set; }
 7 
 8         [Required]
 9         [StringLength(100, ErrorMessage = "請在 {0} 填入最少 {2} 最大 {1} 個字符。", MinimumLength = 6)]
10         [DataType(DataType.Password)]
11         [Display(Name = "用戶密碼")]
12         public string Password { get; set; }
13 
14         [DataType(DataType.Password)]
15         [Display(Name = "確認密碼")]
16         [Compare("Password", ErrorMessage = "請確保和用戶密碼一致。")]
17         public string ConfirmPassword { get; set; }
18 
19         [Required]
20         [StringLength(20, ErrorMessage = "請在 {0} 填入最少 {2} 最大 {1} 個字符。", MinimumLength = 6)]
21         [Display(Name = "用戶賬號")]
22         [DataType(DataType.Text)]
23         [RegularExpression("^[a-zA-Z0-9_]{6,20}$", ErrorMessage = "用戶名由字母或數字組成。")]
24         public string UserName { get; set; }
25     }

 

4、在Views文件夾的Account中的register.cshtml文件中添加“用戶賬號”代碼:

1     <div class="form-group">
2         <label asp-for="UserName" class="col-md-2 control-label"></label>
3         <div class="col-md-10">
4             <input asp-for="UserName" class="form-control" />
5             <span asp-validation-for="UserName" class="text-danger"></span>
6         </div>
7     </div>

大家可以看下,這里的代碼和之前的已經不一樣了,隨着TagHelper的更新,這里的代碼也變為 asp-for了。TagHelper的資料請參閱這里

 

5、修改login,因為改為了用戶名注冊,如果還用email登陸的話,一定出現錯誤。

首先在ViewModels文件夾下找LoginViewModel.cs,在模型內添加 public string UesrName { get; set; },好了在上面堆你想要的規則吧。

1  [Required]
2  [StringLength(20, ErrorMessage = "{0} 必須至少包含 {2} 個字符,最多20個字符。", MinimumLength = 6)]
3  [Display(Name = "用戶賬號")]
4  [DataType(DataType.Text)]
5  [RegularExpression("^[a-zA-Z0-9_]{6,20}$", ErrorMessage ="用戶名由字母或數字組成。")]
6  public string UserName { get; set; }

接着把email模型項去掉或者注釋掉,否則你登陸不上去且還不給提示。 

6、在Views文件夾中的login.cshtml文件中原來為“email”的地方改為“UserName”。

7、打開AccountController.cs文件,找到  public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) 這個方法

把  var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);

改為var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, lockoutOnFailure: false);

現在,各位可以試試了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM