如何在 MVC 5 中使用使用者身份中的角色
我想在 mvc 5 中使用 asp.net useridentity,我執行以下步驟:
1)創建一個mvc項目。
2)創建我自己的數據庫並將web.config形式的連接字元串更改為:
3)我執行項目並創建一個新使用者以將相關表添加到我的數據庫中。
4)我想在accountControler中註冊一個像這樣的程式碼的使用者後向使用者添加一個角色:
public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser() { UserName = model.Email, Email = model.Email }; IdentityResult result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { //******************* Add Role To User ************** if (!Roles.RoleExists("Member")) Roles.CreateRole("Member"); Roles.AddUserToRole(model.Email, "Member"); //**************************************************** await SignInAsync(user, isPersistent: false); // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771 // Send an email with this link // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); return RedirectToAction("Index", "Home"); } else { AddErrors(result); } } // If we got this far, something failed, redisplay form return View(model); }5)我添加
<roleManager enabled="true">進入:
<system.web></system.web>當我創建一個新使用者時,我的使用者註冊得很好,但使用者沒有添加到角色中,當我這樣做時 VS 在 App_Data 中創建一個名為“ASPNETDB.MDF”的新數據庫。所以我找到了一篇新文章,解釋了 web.config 中的角色提供程序設置,並且:
6)我添加
<roleManager enabled="true"> <providers> <clear/> <add name="AspNetSqlRoleProvider" connectionStringName="DefaultConnection" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> </providers> </roleManager>進入 :
<system.web></system.web>但是當我想註冊新使用者時,我發現了這個錯誤:
找不到儲存過程“dbo.aspnet_CheckSchemaVersion”。
現在我認為我的問題是當我執行第 3 步時,它不會完全創建使用者身份數據庫和儲存過程!我是否對 MVC 5 使用角色 true ?請幫我解決這個問題!
當你寫
!Roles.RoleExists("Member")您沒有使用 ASP.NET 標識!相反,您應該使用
ApplicationRole它來擴展IdentityRole類此外,您無需
AspNetSqlRoleProvider在配置文件中說明。Asp.Net Identity 是不同的。在 Asp.Net Identity 中有一個名為ApplicationRoleManagerApp_Start 文件夾的類。您不應該使用 Asp.Net Identity,就好像它是舊的簡單成員一樣。
或者,檢查 Identity 的 beta(這意味著事情可能會改變)版本,以了解有關如何在 Identity 中執行的更多資訊。
以下是如何開始:
- 創建一個新項目:選擇空模板(不是 MVC 不是 WebForm)
- 通過 nuget 安裝 Asp.Net 身份範例
PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre
- 編輯命名空間以匹配您的舊項目命名空間
- 如果您想將一些文件夾從舊項目複製到新項目,請複制您的 (Controllers, Views,…) 而不是配置文件。
在這裡,您可以按如下方式創建角色:
var role = new IdentityRole("roleName"); var roleresult = await RoleManager.CreateAsync(role);並創建使用者並將其添加到特定角色,您將使用它
var user = new ApplicationUser { UserName = "tresorunikin", Email = "tresorunikin@bellashada.com", EmailConfirmed =true }; var userResult = await UserManager.CreateAsync(user, "123@Strong.Password"); if(userResult.Succeeded){ string[] roles =new string[]{"admin","seller","other"}; var roleResult = await UserManager.AddToRolesAsync(user.Id, roles); if(roleResult.Succeeded){ //Here, user has been added to roles } }所有這些都是由
Pranav RastogiMicrosoft 的身份團隊之一為您完成的。請注意,對於這些範例,您的目標是 System.Web.Mvc 的新(測試版)版本,它比 System.Web.Mvc 5.0.0.0 更新如果我沒記錯的話,測試版是 System.Web.MVC 5.0.1.2 或類似的版本那
要了解有關身份的更多資訊, 請點擊此處
更新 範例中的版本是:System.Web.Mvc 5.2.1.0