Nhận id người dùng hiện tại trong ASP.NET Identity 2.0


81

Tôi vừa chuyển sang sử dụng phiên bản 2.0 mới của Identity Framework. Trong 1.0, tôi có thể lấy một đối tượng người dùng bằng cách sử dụng manager.FindByIdAsync(User.Identity.GetUserId()). Các GetUserId()phương pháp dường như không tồn tại trong 2.0.

Bây giờ tất cả những gì tôi có thể tìm ra là sử dụng manager.FindByEmailAsync(User.Identity.Name)tham chiếu đến trường tên người dùng trong bảng người dùng. Trong ứng dụng của tôi, trường này được đặt giống như trường email.

Tôi có thể thấy điều này gây ra sự cố khi ai đó cần cập nhật email của họ. Có cách nào để lấy đối tượng người dùng đã đăng nhập hiện tại dựa trên một giá trị không thay đổi (chẳng hạn như trường id) trong Identity 2.0 Framework không?


Làm thế nào bạn có được UserId, bạn có thể vui lòng cho tôi biết, tôi đang gặp sự cố tương tự.
Ammar Khan

Câu trả lời:


108

GetUserId()là một phương thức mở rộng trên IIdentityvà nó ở trong Microsoft.AspNet.Identity.IdentityExtensions. Đảm bảo rằng bạn đã thêm không gian tên với using Microsoft.AspNet.Identity;.



2
Điều đó dường như không hoạt động với Identity 2. Mọi đề xuất xin vui lòng
Ammar Khan

2
Vẫn nên ở đó. Tôi đang sử dụng GetUserId () trong các dự án Identity 2 của mình ngay bây giờ.
Anthony Chu

4
Trong Identity 3.0, điều này có vẻ như đã chuyển đến không gian tên System.Security.Principal.
Sam

Có phương pháp nào để có được vai trò người dùng hiện tại không? khi nào tôi nên đặt vai trò? Lưu ý: Tôi đang sử dụng nhà cung cấp bộ nhớ tùy chỉnh ..
Jeeva Jsb

61

Để có được CurrentUserId trong Asp.net Identity 2.0, trước tiên hãy nhập Microsoft.AspNet.Identity:

C #:

using Microsoft.AspNet.Identity;

VB.NET:

Imports Microsoft.AspNet.Identity


Và sau đó gọi đến User.Identity.GetUserId()mọi nơi bạn muốn:

strCurrentUserId = User.Identity.GetUserId()

Phương thức này trả về id người dùng hiện tại dưới dạng kiểu dữ liệu được xác định cho userid trong cơ sở dữ liệu (mặc định là String).


1
bạn có thể cho tôi biết tôi có thể tìm thấy DLL tương ứng cho không gian tên Microsoft.AspNet.Identity ở đâu không?
Franziee

14

Đề phòng trường hợp bạn giống tôi và Trường Id của Thực thể Người dùng là Int hoặc một cái gì đó khác ngoài một chuỗi,

using Microsoft.AspNet.Identity;

int userId = User.Identity.GetUserId<int>();

sẽ làm điều đó


4

Tôi gặp vấn đề tương tự. Tôi hiện đang sử dụng Asp.net Core 2.2. Tôi đã giải quyết vấn đề này với đoạn mã sau.

using Microsoft.AspNetCore.Identity;
var user = await _userManager.FindByEmailAsync(User.Identity.Name);

Tôi hy vọng điều này sẽ hữu ích cho ai đó.


1
Bạn đã cứu mạng tôi
Sam Tubb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.