Отримайте поточний ідентифікатор користувача в ASP.NET Identity 2.0


81

Я щойно перейшов до використання нової версії 2.0 Identity Framework. В 1.0 я міг отримати об'єкт користувача за допомогою manager.FindByIdAsync(User.Identity.GetUserId()). GetUserId()Метод , здається, не існує у версії 2.0.

Тепер все, що я можу зрозуміти, це використовувати, manager.FindByEmailAsync(User.Identity.Name)які посилання на ім’я користувача в таблиці користувачів. У моїй програмі це встановлено так само, як поле електронної пошти.

Я бачу, що це спричиняє проблеми, коли хтось потребує оновлення електронної пошти. Чи є спосіб отримати поточний зареєстрований об'єкт користувача на основі незмінного значення (наприклад, поля id) у програмі Identity 2.0 Framework?


Як ви отримали UserId, будь ласка, повідомте мене, я стикаюся з такою ж проблемою.
Аммар Хан,

Відповіді:


108

GetUserId()є методом розширення, IIdentityі він знаходиться в Microsoft.AspNet.Identity.IdentityExtensions. Переконайтеся, що ви додали простір імен за допомогою using Microsoft.AspNet.Identity;.



2
Здається, це не працює з ідентичністю 2. Будь-яка пропозиція, будь ласка
Аммар Хан

2
Повинен бути там. Зараз я використовую GetUserId () у своїх проектах Identity 2.
Ентоні Чу

4
В Identity 3.0, схоже, це переміщено до простору імен System.Security.Principal.
Сем

Чи існує якийсь спосіб отримати поточну роль користувача? коли я повинен встановити роль? Примітка: Я використовую спеціальний постачальник сховищ ..
Jeeva Jsb 06.03.15

61

Щоб отримати CurrentUserId в Asp.net Identity 2.0, спочатку імпортуйте Microsoft.AspNet.Identity:

C #:

using Microsoft.AspNet.Identity;

VB.NET:

Imports Microsoft.AspNet.Identity


А потім телефонуйте User.Identity.GetUserId()куди завгодно:

strCurrentUserId = User.Identity.GetUserId()

Цей метод повертає поточний ідентифікатор користувача як визначений тип даних для ідентифікатора користувача в базі даних (за замовчуванням String).


1
підкажіть, де я можу знайти відповідний DLL для простору імен Microsoft.AspNet.Identity?
Franziee

15

Про всяк випадок, коли ви схожі на мене, а поле Id сутності користувача - це Int або щось інше, крім рядка,

using Microsoft.AspNet.Identity;

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

зробить трюк


4

У мене була та сама проблема. Зараз я використовую Asp.net Core 2.2. Я вирішив цю проблему за допомогою наступного фрагмента коду.

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

Сподіваюся, це комусь стане в нагоді.


1
Ви врятували мені життя
Сем Табб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.