2014-10-16 18 views
8

Tôi muốn sử dụng tính năng người dùng asp.net trong mvc 5, tôi thực hiện các bước sau:Cách sử dụng Vai trò trong danh tính người dùng trong MVC 5

1) tạo dự án mvc.

2) tạo cơ sở dữ liệu của riêng tôi và thay đổi ConnectionString ở dạng web.config: tới:

3) Tôi chạy dự án và tạo một người dùng mới để thêm vào bảng liên quan đến tôi cơ sở dữ liệu.

4) Tôi muốn thêm một vai trò cho một người dùng sau khi đăng ký một người sử dụng như mã này trong 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) tôi thêm

<roleManager enabled="true"> 

thành:

<system.web></system.web> 

khi tôi tạo người dùng mới, người dùng của tôi đăng ký tốt nhưng người dùng không thêm vai trò và khi tôi thực hiện điều này, VS Tạo cơ sở dữ liệu mới trong App_Data với tên "ASPNETDB.MDF". vì vậy tôi tìm thấy một bài viết mới để giải thích về Cài đặt Provider Vai trò trong web.config và:

6) tôi thêm

<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> 

thành:

<system.web></system.web> 

nhưng khi tôi muốn đăng ký mới người dùng tôi đã tìm thấy lỗi này:

Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'.

Bây giờ tôi nghĩ rằng vấn đề của tôi là khi tôi thực hiện bước 3 l không hoàn toàn tạo cơ sở dữ liệu nhận dạng người dùng và thủ tục lưu trữ! Tôi có sử dụng đúng vai trò cho MVC 5 không? Làm ơn hãy giúp tôi giải quyết vấn đề này!

+1

Thông thường những người có đại diện thấp không đặt nhiều nỗ lực trong việc viết câu hỏi của họ nhưng người đàn ông, bạn là một ngôi sao !! Upvoted cho câu hỏi rõ ràng !! – frenchie

Trả lời

9

Khi bạn viết

!Roles.RoleExists("Member") 

bạn không sử dụng ASP.NET nhận dạng! thay vào đó, bạn nên sử dụng ApplicationRole để nó kéo dài IdentityRole lớp

Bên cạnh đó, bạn không cần phải nói với các AspNetSqlRoleProvider trong tập tin cấu hình của bạn. Asp.Net Identity là một cái gì đó khác nhau. Trong Asp.Net Identity có một lớp có tên là ApplicationRoleManager trong thư mục App_Start.

Bạn không nên sử dụng Asp.Net Identity như thể đó là thành viên đơn giản cũ.

Ngoài ra, hãy kiểm tra phiên bản beta (có nghĩa là mọi thứ có thể thay đổi) phiên bản Nhận dạng để tìm hiểu thêm về cách thực hiện trong Danh tính.

Dưới đây là làm thế nào để bắt đầu:

  • Tạo một dự án mới: Chọn mẫu trống (Không MVC không WebForm)
  • Cài đặt Asp.mẫu sắc Net qua NuGet

    PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre 
    
  • chỉnh sửa để phù hợp với không gian tên dự án cũ của bạn namespace
  • Nếu bạn muốn sao chép một số thư mục từ dự án cũ của mình vào dự án mới, sao chép của bạn (kiểm soát, xem, ...) không phải là tệp cấu hình.

Tại đây bạn có thể tạo vai trò như sau:

  var role = new IdentityRole("roleName"); 
      var roleresult = await RoleManager.CreateAsync(role); 

và để tạo ra và thêm một người dùng vào vai trò cụ thể mà bạn sẽ sử dụng này

  var user = new ApplicationUser 
      { 
       UserName = "tresorunikin", 
       Email = "[email protected]", 
       EmailConfirmed =true 
      }; 

      var userResult = await UserManager.CreateAsync(user, "[email protected]"); 
      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 
      } 
      } 

Tất cả những được thực hiện cho bạn bởi Pranav Rastogi , một trong những nhóm Identity tại Microsoft.

Lưu ý rằng với những mẫu này, bạn nhắm mục tiêu phiên bản mới (beta) của System.Web.Mvc mới hơn System.Web.Mvc 5.0.0.0 Nếu tôi nhớ phiên bản beta là System.Web.MVC 5.0. 1.2 hoặc một cái gì đó như thế

Để Tìm hiểu thêm về danh tính click here

CẬP NHẬT Phiên bản trong các mẫu là: System.Web.Mvc 5.2.1.0

+1

FYI MVC 5.2.0 đã được phát hành trong một thời bây giờ – trailmax

+0

Cảm ơn bạn Tôi đã cập nhật câu trả lời của mình – Bellash

Các vấn đề liên quan