2014-11-04 16 views
35

içinde kullanıcı kimliği alın ve şimdi yerleşik kullanıcı giriş fonksiyonelliğini kullanmayı deneyin. Kayıt görünümünde bir kullanıcıyı kaydedebilirim. Yaratılan kullanıcıyla giriş yapmaya çalışırsam bu da işe yarar. Ana sayfaya yönlendirildim.Ben ASP.Net MVC nispeten yeni giriş yapmış olan kullanıcının Asp.Net MVC 5

Ama Geçerli kullanıcının Kullanıcı Kimliğini almak mümkün değilim. Kodumu HomeController'da ve AccountController'da denedim, ancak ikisi de işe yaramadı. İlk satırdaki ifade her zaman sıfırdır.

var userID = User.Identity.GetUserId(); 

if (!string.IsNullOrEmpty(userID)) 
{ 
    var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(ApplicationDbContext.Create())); 
    var currentUser = manager.FindById(User.Identity.GetUserId()); 
} 

UserID'i almadan önce başka bir şey yapmak zorunda mıyım?

cevap

45

cevap kodunuzda hakkı vardır. Bu ne geri geliyor? Eğer ASP.NET Kimlik kullanıyorsanız

var userID = User.Identity.GetUserId(); 

ardından içinde (ve başka bir sayfaya yönlendirme) günlüğü sonra, IPrincipal.IIdentity bir ClaimsIdentity olmalıdır.

var claimsIdentity = User.Identity as ClaimsIdentity; 
if (claimsIdentity != null) 
{ 
    // the principal identity is a claims identity. 
    // now we need to find the NameIdentifier claim 
    var userIdClaim = claimsIdentity.Claims 
     .FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier); 

    if (userIdClaim != null) 
    { 
     var userIdValue = userIdClaim.Value; 
    } 
} 

kod yukarıdaki blok tam olarak değil, ama aslında, IIdentity.GetUserId uzatma yöntemi ne: Bu deneyebilirsiniz.

Eğer bunlardan hiçbiri işe yaramazsa, o zaman kullanıcı sitenize henüz girmiş olmayabilir. Giriş yaptıktan sonra, sunucu kimlik doğrulama çerezini tarayıcıya yazmadan önce başka bir sayfaya yönlendirmelisiniz. Bu tanımlama bilgisi User.Identity'un daha önce numaralı isteklere ilişkin(NameIdentifier) dahil olmak üzere bu hak talep bilgilerinin tümünü içermesi gerekir.

+1

Üzgünüz, bu soruda net değildi, değiştireceğim. Yukarıdaki ifade null değerini döndürür. 'User.Identity.GetUserId()' boş dönerse –

+2

, bu kullanıcı * * oturum olmadığı anlamına gelir. Emin olun ne olursa olsun eylem [yetkilendirme] '' süslenmiş bu in aradığınız, sadece giriş yapmış zorunlu kılmak amacıyla Kullanıcılar ona ulaşabilir. Giriş yapmamış olan herkes giriş sayfanıza otomatik olarak gönderilecektir. –

+1

Cevabınız için teşekkür ederiz. Bu çalışmalardan önce başka bir sayfaya yönlendirdiğim ipucu yardımcı oldu. –