2014-12-16 21 views
31

Bất cứ khi nào tôi tạo một ứng dụng mới với studio trực quan 2013 Express cho web và sử dụng xác thực tài khoản cá nhân và tôi nhấn nút đăng ký, tôi nhận thấy rằng nó thực hiện 'Email' thay vì 'Tên người dùng' và giống nhau trong LoginViewModel vì nó sử dụng Email để Đăng nhập thay vì Tên người dùng. Làm thế nào tôi có thể thay đổi điều này để sử dụng Tên đăng nhập thay vì Email mặc định mà không gặp sự cố? Ngoài ra tôi muốn biết làm thế nào để chuyển đổi mặc định 'guid' đó là một loại chuỗi để 'id' (loại nguyên).Sử dụng Tên người dùng thay vì Email để nhận dạng trong Asp.net mvc5

+0

[Đây] (http://www.asp.net/identity/overview/extensibility/ thay đổi-chính-key-cho-người dùng-in-aspnet-identity) là một bài viết rất tốt, bạn có thể làm theo và bạn sẽ nhận được câu trả lời. Ngoài ra, hãy xem [câu hỏi] này (http://stackoverflow.com/questions/19758575/asp-net-identity-use-email-instead-of-user-name) Bạn có thể sử dụng lớp usermanager của riêng bạn và sử dụng tên người dùng thay vì email . – Mairaj

+1

Theo mặc định, mã đang sử dụng email làm tên người dùng. 'var user = new ApplicationUser {UserName = model.Email, Email = model.Email};'. Thêm thuộc tính userName vào RegisterViewModel và sử dụng nó thay vào đó. – Lijo

Trả lời

36

Câu hỏi được liên kết trong câu trả lời được chấp nhận sẽ giải thích cách sử dụng Email thay vì UserName, OP muốn UserName thay vì email là thứ tôi đang tìm kiếm trong Identity 2.0 trong dự án MVC.

Trong trường hợp bất kỳ ai khác đến đây từ tìm kiếm trên google, thực sự rất dễ dàng để thực hiện việc này. Nếu bạn nhìn vào hành động đăng ký, nó chỉ đơn giản là đặt UserName thành địa chỉ Email. Vì vậy, .........

Thêm tên người dùng vào RegisterViewModel và thêm nó vào chế độ xem đăng ký.

<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", @placeholder = "Username or email" }) 
     </div> 
</div> 

Trong Register bài Action trên AccountController thiết UserName để UserName của ViewModel và email tới Email của ViewModel.

var user = new ApplicationUser { UserName = model.UserName, Email = model.Email }; 
+0

Tôi không muốn sử dụng email theo bất kỳ cách nào. Có cách nào để tôi có thể đăng ký mà không cung cấp địa chỉ email không? –

+0

Tôi không biết địa chỉ email có bắt buộc trong mô hình hay không nhưng nếu không, bạn có thể xóa bốn dòng trong chế độ xem đăng ký cho địa chỉ email và thay thế chúng bằng mã UserName mà tôi đã liệt kê ở trên. Sau đó, bạn có thể đặt ApplicationUser mới như sau trong hành động đăng trong AccountController của bạn. var user = new ApplicationUser {UserName = model.UserName, Email = model.Email}; Nếu địa chỉ email là bắt buộc, chỉ cần đặt email thành string.empty – Hoody

+0

Kiểm tra xác thực cho chuỗi.Empty. sasi kumar của câu trả lời hoạt động chính xác. –

19

Để làm cho email là không độc đáo:

Cấu hình dưới đây trong IdentityConfig

manager.UserValidator = new UserValidator<ApplicationUser>(manager) 
      { 
       AllowOnlyAlphanumericUserNames = false, 
       RequireUniqueEmail = false     
      }; 
+1

Đây là giải pháp đơn giản nhất cho tôi và loại bỏ một vấn đề mà tôi có sau khi chuyển đổi từ MVC 4 sang MVC 5. – Xipooo

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