Saya telah melakukan ini sebelumnya dengan menggunakan MVC5 User.Identity.GetUserId()
tetapi sepertinya tidak bekerja di sini. Tidak User.Identity
memiliki GetUserId()
metode
saya menggunakan Microsoft.AspNet.Identity
Saya telah melakukan ini sebelumnya dengan menggunakan MVC5 User.Identity.GetUserId()
tetapi sepertinya tidak bekerja di sini. Tidak User.Identity
memiliki GetUserId()
metode
saya menggunakan Microsoft.AspNet.Identity
System.Web.HttpContext.Current.User.Identity.Name
?Jawaban:
Pembaruan dalam ASP.NET Core Version> = 2.0
Dalam Kontroler:
Di beberapa kelas lain:
Maka Anda harus mendaftar
IHttpContextAccessor
diStartup
kelas sebagai berikut:Untuk lebih mudah dibaca, tulis metode ekstensi sebagai berikut:
Kemudian gunakan sebagai berikut:
sumber
null
.User.Identity.Name
, itu bisa jadi karena Otentikasi Anonim diaktifkan. Saya dapatUser.Identity.Name
mengembalikan domain dan nama pengguna saya dengan memperluasProperties > launchSettings.json
, dan mengaturanonymousAuthentication
kefalse
, danwindowsAuthentication
ketrue
.Hingga ASP.NET Core 1.0 RC1 :
Itu adalah User.GetUserId () dari System.Security.Claims namespace.
Sejak ASP.NET Core 1.0 RC2 :
Anda sekarang harus menggunakan UserManager . Anda dapat membuat metode untuk mendapatkan pengguna saat ini:
Dan dapatkan informasi pengguna dengan objek:
Catatan: Anda dapat melakukannya tanpa menggunakan metode penulisan satu baris seperti ini
string mail = (await _userManager.GetUserAsync(HttpContext.User))?.Email
, tetapi itu tidak menghormati prinsip tanggung jawab tunggal. Lebih baik mengisolasi cara Anda mendapatkan pengguna karena jika suatu hari Anda memutuskan untuk mengubah sistem manajemen pengguna Anda, seperti menggunakan solusi lain dari Identity, itu akan menyakitkan karena Anda harus meninjau seluruh kode Anda.sumber
Anda bisa mendapatkannya di controller Anda:
atau tulis metode ekstensi seperti sebelumnya .Core v1.0
dan dapatkan dimanapun Klaim penggunaPrincipal tersedia :
sumber
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
Convert.ToInt32(User.FindFirstValue(ClaimTypes.NameIdentifier))
untuk mendapatkan integer UserIdSaya termasuk menggunakan System.Security.Claims dan saya bisa mengakses metode ekstensi GetUserId ()
NB: Saya sudah menggunakan Microsoft.AspNet.Identity tetapi tidak bisa mendapatkan metode ekstensi. Jadi saya kira keduanya harus digunakan bersama satu sama lain
EDIT : Jawaban ini sudah usang. Lihatlah jawaban Soren atau Adrien untuk mengetahui cara pencapaiannya di CORE 1.0
sumber
var userId = User.GetUserId();
Hanya untuk .NET Core 2.0 Berikut ini diperlukan untuk mengambil UserID dari Pengguna yang log in di
Controller
kelas:atau
misalnya
sumber
Sebagaimana dinyatakan di suatu tempat dalam posting ini, metode GetUserId () telah dipindahkan ke UserManager.
Jika Anda memulai proyek kosong, Anda mungkin perlu menambahkan UserManger ke layanan Anda di startup.cs. Kalau tidak, ini seharusnya sudah menjadi masalahnya.
sumber
Anda harus mengimpor Microsoft.AspNetCore.Identity & System.Security.Claims
sumber
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"
untukUser.FindFirstValue(ClaimTypes.NameIdentifier);
?Meskipun jawaban Adrien benar, Anda dapat melakukan ini semua dalam satu baris. Tidak perlu fungsi tambahan atau kekacauan.
Berhasil saya memeriksanya di ASP.NET Core 1.0
maka Anda bisa mendapatkan properti lain seperti variabel
user.Email
. Saya harap ini membantu seseorang.sumber
Untuk ASP.NET Core 2.0, Entity Framework Core 2.0, AspNetCore.Identity 2.0 api ( https://github.com/kkagill/ContosoUniversity-Backend ):
Itu
Id
diubah menjadiUser.Identity.Name
Tanggapan:
sumber
this.User.Identity.Name
cenderung menjadi nama pengguna. Pada pengujian saya, nama pengguna adalah email, menjadi pengguna masuk dari pendaftaran atau masuk dari login eksternal (misalnya, Facebook, Google). Kode berikut mengembalikan userId. Saya menggunakan kunci primer yang ditambahkan secara otomatis untuk tabel pengguna identitas saya, karenanya int.Parse.int userId = int.Parse(this.User.FindFirstValue(ClaimTypes.NameIdentifier));
FindByIdAsync
tidak berfungsi karena Anda memberikan nama pengguna. Ini berfungsi saat Anda menggantinya denganFindByNameAsync
.dalam
APiController
Sesuatu seperti ini, Anda akan mendapatkan klaim
sumber
User.Identity.GetUserId ();
tidak ada di asp.net identity core 2.0. dalam hal ini, saya telah berhasil dengan cara yang berbeda. Saya telah membuat kelas umum untuk menggunakan seluruh aplikasi, karena mendapatkan informasi pengguna.
buat kelas umum PCommon & antarmuka IPCommon menambahkan referensi
using System.Security.Claims
Di sini implementasi kelas bersama
dapatkan userId dan nama dalam aksi sisipkan
Terima kasih, Maksud
sumber
Untuk mendapatkan id pengguna saat ini dalam tampilan silet, kami dapat menyuntikkan UserManager dalam tampilan seperti ini:
Semoga bermanfaat.
sumber
gunakan bisa menggunakan
untuk beberapa alasan NameIdentifier sekarang mengambil nama pengguna (.net core 2.2)
sumber
Sebagai administrator yang bekerja pada profil orang lain dan Anda perlu mendapatkan ID dari profil yang sedang Anda kerjakan, Anda dapat menggunakan ViewBag untuk menangkap Id misalnya ViewBag.UserId = userId; sementara userId adalah Parameter string dari metode yang sedang Anda kerjakan.
sumber
Jika Anda menginginkan ini di ASP.NET MVC Controller, gunakan
Anda perlu menambahkan
using
pernyataan karenaGetUserId()
tidak akan ada di sana tanpanya.sumber
User.GetUserId()
dan tidakUser.Identity.GetUserId()