c# - एएसपी.नेट एमवीसी में वर्तमान उपयोगकर्ता कैसे प्राप्त करें




.net asp.net-mvc iis forms-authentication (17)

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

Page.CurrentUser

मैं वर्तमान उपयोगकर्ता को एएसपी.नेट एमवीसी में नियंत्रक वर्ग के अंदर कैसे प्राप्त करूं?


Answers

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


Asp.net एमवीसी पहचान 2 में, आप वर्तमान उपयोगकर्ता नाम प्राप्त कर सकते हैं:

var username = System.Web.HttpContext.Current.User.Identity.Name;

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

User.Identity.Name

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

using Microsoft.AspNet.Identity;

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

User.Identity.GetUserId();

HttpContext.Current.User आज़माएं।

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

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

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


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

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


हम 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'

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

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

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


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


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

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

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

IPrincipal currentUser = HttpContext.Current.User;
bool writeEnable = currentUser.IsInRole("Administrator") ||
        ...
                   currentUser.IsInRole("Operator");


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


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

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

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

वर्तमान लॉग-इन उपयोगकर्ता को सक्रिय निर्देशिका में कैसे प्राप्त करें जब आपका 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...

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

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

आपके वेब.कॉन्फिग में आपके पास impersonate सेट भी होना चाहिए:

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

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

<authentication mode="Windows" />

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

Membership.GetUser().UserName

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


विधि को public static IEnumerable<T> GetValues<T>() को अपनी कक्षा में जोड़ें, जैसे

public static IEnumerable<T> GetValues<T>()
{
    return Enum.GetValues(typeof(T)).Cast<T>();
}

कॉल करें और अपने enum पास, अब आप foreach का उपयोग कर इसके माध्यम से फिर से कर सकते हैं

 public static void EnumerateAllSuitsDemoMethod()
 {
     // custom method
     var foos = GetValues<Suit>(); 
     foreach (var foo in foos)
     {
         // Do something
     }
 }




c# .net asp.net-mvc iis forms-authentication