ASP.NET MVC में वर्तमान उपयोगकर्ता कैसे प्राप्त करें


268

प्रपत्र मॉडल में, मुझे वर्तमान लॉग-इन उपयोगकर्ता द्वारा प्राप्त करने के लिए उपयोग किया जाता है:

Page.CurrentUser

मुझे ASP.NET MVC में कंट्रोलर क्लास के अंदर वर्तमान उपयोगकर्ता कैसे मिलेगा?

जवाबों:


266

यदि आपको उपयोगकर्ता को नियंत्रक से प्राप्त करने की आवश्यकता है, तो नियंत्रक की Userसंपत्ति का उपयोग करें । यदि आपको इसे देखने की आवश्यकता है, तो मैं आपको विशेष रूप से उस चीज़ को पॉप्युलेट करूंगा ViewData, या आप उपयोगकर्ता को केवल कॉल कर सकते हैं क्योंकि मुझे लगता है कि यह एक संपत्ति है ViewPage


2
"या आप उपयोगकर्ता को केवल इसलिए कॉल कर सकते हैं क्योंकि मुझे लगता है कि यह व्यूपेज की एक संपत्ति है" - तो क्या आपका मतलब है कि जब आप दृश्य में हों तो Page.user का उपयोग करें?
मावलडेन

17
हां, आप इसका उपयोग कर सकते हैं, जैसे "हाय, @ User.Identity.Name!" cshtml में।
शॉन

198

मैंने पाया कि Userकाम करता है, वह है, User.Identity.Nameया User.IsInRole("Administrator")


19
बस इसे जोड़ने के लिए, यदि आप किसी ऐसे वर्ग के बाहर काम कर रहे हैं, जिसे आपको या तो Imports System.Webइसके साथ और आगे की योग्यता प्राप्त करनी होगी HttpContext.Current.User.Identity.Name, या पूर्ण सिंटैक्स का उपयोग करके सीधे अर्हता प्राप्त करनी होगी :System.Web.HttpContext.Current.User.Identity.Name
पॉल

एक नियंत्रक के अंदर काम करता है और यदि ViewModel का उपयोग या तो नियंत्रक से विरासत में मिलता है या पॉल के सुझाव का पालन करता है।
उपयोगी

60

कोशिश करो HttpContext.Current.User

सार्वजनिक तौर पर साझा संपत्ति वर्तमान () के रूप में System.Web.HttpContext
System.Web.HttpContext के सदस्य

सारांश:
वर्तमान HTTP अनुरोध के लिए System.Web.HttpContext ऑब्जेक्ट हो जाता है या सेट हो जाता है।

वापसी मान:
वर्तमान HTTP अनुरोध के लिए System.Web.HttpContext


2
जाहिर तौर पर HttpContext के पास "करंट" नाम की कोई संपत्ति नहीं है।
सेराट ओजगेल

20
मेरा मानना ​​है कि आप दोनों दो अलग-अलग चीजों के बारे में बात कर रहे हैं। System.Web.HttpContext और स्थिर संपत्ति: System.Web.Mvc.Controller.HttpContext (जिसमें "वर्तमान" संपत्ति नहीं है।
जेफ शेल्डन

1
यह एक गैर-एमवीसी वातावरण पर काम किया, बस मुझे जो चाहिए था। धन्यवाद! :)
वाग्नेर दा सिल्वा

38

आप इस तरह ASP.NET MVC4 में उपयोगकर्ता का नाम प्राप्त कर सकते हैं:

System.Web.HttpContext.Current.User.Identity.Name

4
यदि आपको यह त्रुटि मिल रही है 'System.Web.HttpContextBase' does not contain a definition for 'Current' and no extension method 'Current' accepting a first argument of type 'System.Web.HttpContextBase' could be found, तो मैं सुझाव दूंगा कि इस तरह एक पूर्ण कॉल करें System.Web.HttpContext.Current.User.Identity.Name
सिंपल सैंडमैन

21

मुझे लगता है कि यह वास्तव में पुराना है, लेकिन मैं अभी ASP.NET MVC के साथ शुरुआत कर रहा हूं, इसलिए मैंने सोचा कि मैं अपने दो सेंटों को चिपका दूंगा:

  • Request.IsAuthenticated आपको बताता है कि उपयोगकर्ता प्रमाणित है या नहीं।
  • Page.User.Identity आपको लॉग-इन उपयोगकर्ता की पहचान देता है।

16

मैं उपयोग करता हूं:

Membership.GetUser().UserName

मुझे यकीन नहीं है कि यह ASP.NET MVC में काम करेगा, लेकिन यह एक शॉट के लायक है :)


यह सदस्यता वर्ग कहाँ से आता है? IntelliSense इसे डिफ़ॉल्ट रूप से नहीं पहचानता है।
सेराट ओजगेल

System.Web.Security नामस्थान। मैं सकारात्मक नहीं हूँ यह MVC में उपयोगी है, लेकिन मैं इसका उपयोग वेब फ़ॉर्म के लिए लॉगिन नियंत्रणों के साथ करता हूं।
सीन

1
यह किसी भी ASP.NET अनुप्रयोग में उपयोगी है जो सदस्यता प्रदाताओं का उपयोग करता है।
जैमीबारो

2
यह वास्तव में एक डेटाबेस अनुरोध करेगा। HttpContext.Current.User नहीं करता है।
माइक कोल

11

उपयोगकर्ता नाम लॉग इन करना: System.Web.HttpContext.Current.User.Identity.Name


9

फ़िल्टरिंग के प्रयोजनों के लिए एक नियंत्रक में ASP.NET MVC 4 में निर्मित सरल प्रमाणीकरण का उपयोग करके बनाई गई उपयोगकर्ता आईडी को संदर्भित करने के लिए (जो कि यदि आप डेटाबेस-प्रथम और इकाई फ्रेमवर्क 5 का उपयोग कर रहे हैं तो कोड-प्रथम बाइंडिंग उत्पन्न करने के लिए और आपकी तालिकाओं को संरचित किया गया है) कि userID के लिए एक विदेशी कुंजी का उपयोग किया जाता है), आप उपयोग कर सकते हैं

WebSecurity.CurrentUserId

एक बार जब आप एक उपयोग कथन जोड़ते हैं

using System.Web.Security;

4
दुर्भाग्य से यह MVC में अब काम नहीं कर रहा है। 5 यकीन नहीं क्यों = /
जेड ग्रांट

2
में ही System.Security.Principal.WindowsIdentity.GetCurrent().Nameकाम करता है MVC 5। हालाँकि, जो उपयोगकर्ता नाम के साथ डोमेन नाम को खींचता है। यानी डोमेन \ उपयोगकर्ता नाम
14

8

ASP.Net MVC में उपयोगकर्ता को लॉग इन करने के लिए हम निम्नलिखित कोड का उपयोग कर सकते हैं:

var user= System.Web.HttpContext.Current.User.Identity.GetUserName();

भी

var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'

Environment.UserName - Will Display format : 'Username'

7

उपयोगकर्ता नाम के साथ:

User.Identity.Name

लेकिन अगर आपको सिर्फ आईडी प्राप्त करने की आवश्यकता है, तो आप इसका उपयोग कर सकते हैं:

using Microsoft.AspNet.Identity;

तो, आप सीधे यूजर आईडी प्राप्त कर सकते हैं:

User.Identity.GetUserId();

यह विधि एक System.Guid
Gilberto B. Terra Jr.

User.Identity.Name जो एक आईडी संपत्ति नहीं है System.Security.Principal.IPrincipal का एक उदाहरण है ... User.Identity.GetUserId के उपयोगकर्ता वस्तु से इस उपयोगकर्ता अलग है
सामरा


5

का उपयोग करें System.Security.Principal.WindowsIdentity.GetCurrent().Name

यह वर्तमान लॉग-इन विंडोज उपयोगकर्ता को मिलेगा।


1
हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन कुछ संदर्भों को शामिल करना बेहतर होगा, यह बताएंगे कि यह कैसे काम करता है, और इसका उपयोग करने के लिए वर्णन करें। कोड-केवल उत्तर लंबे समय में उपयोगी नहीं हैं।
ryanyuyu

System.Security.Principal.WindowsIdentity.GetCurrent ()। नाम वर्तमान उपयोगकर्ता को Windows में लॉग इन करता है, ओपी वर्तमान में वेब साइट में लॉग इन किए गए उपयोगकर्ता के लिए पूछ रहा है।
ग्रैंडमास्टरफ्लश

4

ASP.NET MVC 3 में, इसके लायक क्या है, आप केवल उस उपयोगकर्ता का उपयोग कर सकते हैं जो वर्तमान अनुरोध के लिए उपयोगकर्ता को लौटाता है।


4

यदि आप अपने लॉगिन पृष्ठ के अंदर हैं, तो उदाहरण के लिए LoginUser_LoggedIn घटना में, Current.User.Identity.Name एक खाली मान लौटाएगा, इसलिए आपको अपनीLoginControlName.UserName संपत्ति का उपयोग करना होगा।

MembershipUser u = Membership.GetUser(LoginUser.UserName);

4

आप निम्नलिखित कोड का उपयोग कर सकते हैं:

Request.LogonUserIdentity.Name;

यह आपको AppPool का उपयोगकर्ता नाम देता है जो अनुप्रयोग के रूप में चल रहा है।
जेसन गीगर


2
var ticket = FormsAuthentication.Decrypt(
                    HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Value);

if (ticket.Expired)
{
    throw new InvalidOperationException("Ticket expired.");
}

IPrincipal user =  (System.Security.Principal.IPrincipal) new RolePrincipal(new FormsIdentity(ticket));

2

यदि आप किसी इंट्रानेट पर सक्रिय निर्देशिका में काम कर रहे हैं, तो यहां कुछ सुझाव दिए गए हैं:

(विंडोज सर्वर 2012)

वेब सर्वर पर AD से बात करने वाली किसी भी चीज़ को चलाने के लिए परिवर्तनों और धैर्य का एक गुच्छा आवश्यक है। जब से एक वेब सर्वर बनाम स्थानीय IIS / IIS एक्सप्रेस पर चल रहा है, तो यह AppPool की पहचान में चलता है, इसलिए आपको इसे स्थापित करना होगा जो कोई भी साइट को हिट करता है।

जब आपके ASP.NET MVC एप्लिकेशन नेटवर्क के अंदर एक वेब सर्वर पर चल रहा हो, तो एक सक्रिय निर्देशिका में वर्तमान लॉग-इन उपयोगकर्ता कैसे प्राप्त करें:

// Find currently logged in user
UserPrincipal adUser = null;
using (HostingEnvironment.Impersonate())
{
    var userContext = System.Web.HttpContext.Current.User.Identity;
    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, ConfigurationManager.AppSettings["AllowedDomain"], null,
                                                ContextOptions.Negotiate | ContextOptions.SecureSocketLayer);
    adUser = UserPrincipal.FindByIdentity(ctx, userContext.Name);
}
//Then work with 'adUser' from here...

आपको निम्नलिखित में 'सक्रिय निर्देशिका संदर्भ' के साथ करने के लिए किसी भी कॉल को लपेटना होगा ताकि यह AD जानकारी प्राप्त करने के लिए होस्टिंग वातावरण के रूप में कार्य कर रहा हो:

using (HostingEnvironment.Impersonate()){ ... }

आपको impersonateअपने web.config में सही होना चाहिए :

<system.web>
    <identity impersonate="true" />

आपके पास web.config में Windows प्रमाणीकरण होना चाहिए:

<authentication mode="Windows" />

मुझे ऐसा नहीं लगता, क्योंकि यह स्पष्ट रूप से आपके सक्रिय निर्देशिका उपयोगकर्ता क्रेडेंशियल्स का उपयोग कर रहा है। यदि आप अपने उपयोगकर्ताओं को AD के माध्यम से प्रमाणित करने की इच्छा रखते हैं, तो आपके पास 'फ़ॉर्म' क्यों होंगे?
ब्यू डी'अमोर

हमारे संगठन में, ऐसे स्थान हैं जहां हमारे पास कई कार्यस्थान हैं जो कई "फ़ील्ड" कर्मियों द्वारा साझा किए जाते हैं। उसके कारण, हमें अपने इंट्रानेट वेब अनुप्रयोगों में लॉगिन पृष्ठ जोड़ना होगा।
पाटे गुटी

वर्कअराउंड के रूप में: आपके पास इस ऐप की दो प्रतियां चल सकती हैं, इनमें से एक 'फॉर्म्स' मोड में है, जिसकी अपनी पहचान टेबल है या आप दोनों को एक ऐप में मिला सकते हैं, लेकिन यह पेचीदा है। एक त्वरित Google ने इस बात का खुलासा किया: stackoverflow.com/questions/2250921/…
Beau D'Amore

<पहचान प्रतिरूपण = "सत्य" /> को मिलाने पर बदलने की आवश्यकता हो सकती है
ब्यू डी'अमोर


1

IIS प्रबंधक में, प्रमाणीकरण के तहत, अक्षम करें: 1) अनाम प्रमाणीकरण 2) प्रपत्र प्रमाणीकरण

फिर सर्वर कंट्रोलर बनाम टेस्टिंग को संभालने के लिए अपने कंट्रोलर में निम्नलिखित जोड़ें:

string sUserName = null;
string url = Request.Url.ToString();

if (url.Contains("localhost"))
  sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
  sUserName = User.Identity.Name;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.