2014-11-04 11 views
35

में लॉग-इन किए गए उपयोगकर्ता के उपयोगकर्ता आईडी प्राप्त करें I ASP.Net MVC के लिए अपेक्षाकृत नया हूं और अब अंतर्निहित उपयोगकर्ता लॉगिन कार्यक्षमता का उपयोग करने का प्रयास करें। मैं पंजीकरण उपयोगकर्ता में एक उपयोगकर्ता को पंजीकृत करने में सक्षम हूं। अगर मैं बनाए गए उपयोगकर्ता के साथ लॉगिन करने का प्रयास करता हूं तो यह भी काम करता है। मुझे मास्टर पेज पर रीडायरेक्ट किया गया है।Asp.Net MVC 5

लेकिन मैं वर्तमान उपयोगकर्ता का उपयोगकर्ता आईडी प्राप्त करने में सक्षम नहीं हूं। मैंने होमकंट्रोलर में और खाता नियंत्रक में अपना कोड आजमाया, लेकिन दोनों काम नहीं कर पाए। पहली पंक्ति में बयान हमेशा शून्य देता है।

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 होने से पहले कुछ और करने के लिए किया है?

उत्तर

45

उत्तर आपके कोड में ठीक है। यह क्या लौटता है?

var userID = User.Identity.GetUserId(); 

आप ASP.NET पहचान का उपयोग कर रहे हैं, तो के बाद में (और एक अन्य पृष्ठ पर रीडायरेक्ट) प्रवेश, IPrincipal.IIdentity एक ClaimsIdentity होना चाहिए। आप इस कोशिश कर सकते हैं:

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; 
    } 
} 

कोड के ऊपर ब्लॉक वास्तव में नहीं है, लेकिन अनिवार्य रूप से, क्या IIdentity.GetUserId विस्तार विधि है।

यदि इनमें से कोई भी काम नहीं करता है, तो उपयोगकर्ता वास्तव में आपकी साइट में अभी तक लॉग इन नहीं हो सकता है। लॉग इन करने के बाद, सर्वर को प्रमाणीकरण कुकी को ब्राउज़र में लिखने से पहले आपको किसी अन्य पृष्ठ पर रीडायरेक्ट करना होगा। इस कुकी को User.Identity से पहले लिखा जाना चाहिए, इन सभी दावों की जानकारी (NameIdentifier सहित) बाद के अनुरोधों पर पर है।

+1

क्षमा करें, यह मेरे प्रश्न में स्पष्ट नहीं था, मैं इसे बदल दूंगा। ऊपर दिया गया बयान शून्य देता है। –

+2

यदि 'User.Identity.GetUserId()' शून्य लौटाता है, तो इसका मतलब है कि उपयोगकर्ता * लॉग इन नहीं हुआ है। सुनिश्चित करें कि आप जिस भी क्रिया को कॉल कर रहे हैं उसे '[अधिकृत करें]' से सजाया गया है, ताकि केवल लॉग इन किया जा सके उपयोगकर्ता इसे प्राप्त कर सकते हैं। लॉग इन नहीं किया गया कोई भी आपके लॉगिन पेज पर स्वचालित रूप से भेजा जाएगा। –

+1

आपके उत्तर के लिए धन्यवाद। इस काम से पहले मुझे किसी अन्य पृष्ठ पर रीडायरेक्ट करने का संकेत दिया गया है। –