কিভাবে এএসপি.নেট এমভিসিতে বর্তমান ব্যবহারকারী পাবেন


268

একটি ফর্মের মডেলটিতে আমি বর্তমান লগ-ইন করা ব্যবহারকারী দ্বারা পেয়েছিলাম:

Page.CurrentUser

আমি কীভাবে এএসপি.এনইটি এমভিসিতে একটি নিয়ামক শ্রেণীর অভ্যন্তরে বর্তমান ব্যবহারকারীকে পেতে পারি?

উত্তর:


266

আপনার যদি কনট্রোলারের মধ্যে থেকে ব্যবহারকারীটি পেতে হয় তবে কন্ট্রোলারের Userসম্পত্তিটি ব্যবহার করুন । যদি আপনার ভিউ থেকে এটির প্রয়োজন হয় তবে আপনার বিশেষত যা প্রয়োজন তা আমি উত্পন্ন করব ViewData, বা আপনি কেবল ব্যবহারকারী হিসাবে কল করতে পারেন কারণ আমি মনে করি এটি এর সম্পত্তি ViewPage


2
"বা আপনি কেবল ভিউপেজের সম্পত্তি বলে মনে করে ব্যবহারকারীকে কল করতে পারেন" - সুতরাং আপনি যখন ভিউতে থাকবেন তখন কী আপনি পৃষ্ঠা.ইউজারটি ব্যবহার করবেন?
মাওলডনে

17
হ্যাঁ, আপনি এটি ব্যবহার করতে পারেন, "হাই, @ ব্যবহারকারী। পরিচয়। নাম!" সিএসটিএমএলে
শন

198

আমি খুঁজে পেয়েছি যে Userকাজ করে, যে, User.Identity.Nameবা User.IsInRole("Administrator")


19
কেবল এটি যুক্ত করার জন্য, আপনি যদি কোনও ফর্মের বাইরে কোনও ক্লাসে কাজ করছেন তবে আপনাকে পুরো বাক্য গঠনটি ব্যবহার করে Imports System.Webআরও যোগ্যতা অর্জন করতে হবে HttpContext.Current.User.Identity.Nameবা সরাসরি যোগ্যতা অর্জন করতে হবে:System.Web.HttpContext.Current.User.Identity.Name
পল

একটি নিয়ামকের ভিতরে কাজ করে এবং যদি ভিউমোডেল ব্যবহার করে হয় হয় নিয়ামকের কাছ থেকে উত্তরাধিকারী হয় বা পলের পরামর্শ অনুসরণ করে।
দরকারী

60

ব্যবহার করে দেখুন HttpContext.Current.User

সার্বজনিক অংশ প্রপার্টি বর্তমান () হিসেবে System.Web.HttpContext
System.Web.HttpContext সদস্য

সংক্ষিপ্তসার:
বর্তমান এইচটিটিপি অনুরোধের জন্য সিস্টেমটি পায় বা সেট করে e ওয়েবে H হিট্প কনটেক্সট অবজেক্ট।

রিটার্ন মানগুলি:
বর্তমান এইচটিটিপি অনুরোধের জন্য সিস্টেম.ডাব্লুএইচটিপি কনটেক্সট


2
দৃশ্যত HTTPContext এর "কারেন্ট" নামের একটি সম্পত্তি নেই।
সেরহাট ওজগেল

20
আমি বিশ্বাস করি আপনি দুজন দুটি ভিন্ন বিষয়ে কথা বলছেন। System.Web.HttpContext এবং স্থিতিশীল সম্পত্তি: System.Web.Mvc.Controller.HttpContext (যার "বর্তমান" সম্পত্তি নেই
জেফ শেল্ডন

1
এটি একটি এমভিসি নন পরিবেশে কাজ করেছে, ঠিক আমার যা প্রয়োজন। ধন্যবাদ! :)
ওয়াগনার দা সিলভা

38

আপনি এএসপি.নেট এমভিসি 4 তে ব্যবহারকারীর নাম পেতে পারেন:

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

আমি বুঝতে পারি এটি সত্যই পুরানো, তবে আমি কেবল এএসপি.নেট এমভিসি দিয়েই শুরু করছি, তাই আমি ভেবেছিলাম যে আমি আমার দুটি সেন্ট আটকে রেখেছি:

  • Request.IsAuthenticated ব্যবহারকারী প্রমাণীকরণ করা হয় কিনা আপনাকে জানায়।
  • Page.User.Identity আপনাকে লগ-ইন করা ব্যবহারকারীর পরিচয় দেয়।

16

আমি ব্যবহার করি:

Membership.GetUser().UserName

আমি নিশ্চিত নই যে এটি এএসপি.নেট এমভিসিতে কাজ করবে, তবে এটি শট করার মতো :)


এই সদস্যপদ শ্রেণি কোথা থেকে আসে? ইন্টেলিসেন্স এটিকে ডিফল্টরূপে স্বীকৃতি দেয় না।
সেরহাট ওজগেল 21

সিস্টেম.ওয়েব.সিকিউরিটি নেমস্পেস। আমি ইতিবাচক নই এটি এমভিসিতে কার্যকর তবে আমি এটি ওয়েব ফর্মগুলির জন্য লগইন নিয়ন্ত্রণের সাথে ব্যবহার করি।
শান

1
এটি সদস্যতা প্রদানকারীদের ব্যবহার করে এমন কোনও এএসপি.এনইটি অ্যাপ্লিকেশনে দরকারী।
জামিবারো

2
এটি আসলে একটি ডাটাবেস অনুরোধ করবে। এইচটিটিপি কনটেক্সট.ক্রেনার.উউজার দেয় না।
মাইক কোল

11

ব্যবহারকারীর নাম লগ ইন: System.Web.HttpContext.Current.User.Identity.Name


9

ফিল্টারিংয়ের উদ্দেশ্যে একটি নিয়ামক এএসপি.নেট এমভিসি 4 এ নির্মিত সাধারণ প্রমাণীকরণ ব্যবহার করে তৈরি করা কোনও আইডি রেফারেন্স করার জন্য (আপনি যদি কোড-ফার্স্ট বাইন্ডিংগুলি তৈরি করতে প্রথমে ডাটাবেস এবং সত্তা ফ্রেমওয়ার্ক 5 ব্যবহার করছেন এবং আপনার টেবিলগুলি কাঠামোগত করা হয়েছে তাই সহায়ক যা ইউজার আইডি-তে একটি বিদেশী কী ব্যবহার করা হয়), আপনি ব্যবহার করতে পারেন

WebSecurity.CurrentUserId

একবার আপনি ব্যবহারের বিবৃতি যুক্ত করুন

using System.Web.Security;

4
দুর্ভাগ্যক্রমে এটি এমভিসি 5 তে আর কাজ করবে বলে মনে হয় না 5 কেন নিশ্চিত নয় কেন / /
জেদ গ্রান্ট

2
শুধুমাত্র System.Security.Principal.WindowsIdentity.GetCurrent().Nameকাজ করে MVC 5। তবে এটি ব্যবহারকারীর নাম সহ ডোমেন নাম টান দেয়। অর্থাত্ ডোমেন \ ব্যবহারকারীর নাম
shaz

8

এএসপি.নেট এমভিসিতে বর্তমান লগ ইন করতে আমরা নিম্নলিখিত কোডটি ব্যবহার করতে পারি:

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

এই পদ্ধতিটি একটি সিস্টেম.গুইড
গিলবার্তো বি। টেরা জুনিয়র

ইউজার.আইডেন্টিটি.নাম সিস্টেম.সিকিউরিটি.প্রিন্সিপাল.আইপি প্রিন্সিপাল যার একটি আইডি সম্পত্তি নেই ... এর এই ব্যবহারকারী কি ইউজার.ইডেন্টিটি.গেট ইউজারআইডি এর ইউজার অবজেক্ট
সামরা

6

এই পৃষ্ঠায় আপনি যা সন্ধান করছেন তা হতে পারে:
এমভিসি 3 তে পৃষ্ঠা.উজার.আইডেন্টিটি.নাম ব্যবহার করা

আপনি শুধু প্রয়োজন User.Identity.Name


এটি কেবলমাত্র একটি নিয়ামকের ভিতরে কাজ করে; অথবা যদি আপনার ভিউমোডেল নিয়ামকের কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়
21

5

ব্যবহার System.Security.Principal.WindowsIdentity.GetCurrent().Name

এটি বর্তমান লগ-ইন উইন্ডোজ ব্যবহারকারী পাবেন।


1
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কিছু প্রসঙ্গ অন্তর্ভুক্ত করা, এটি কীভাবে কাজ করে তা ব্যাখ্যা করা এবং এটি কখন ব্যবহার করবেন তা বর্ণনা করা ভাল। কোড-কেবল উত্তরগুলি দীর্ঘমেয়াদে কার্যকর নয়।
ryanyuyu

সিস্টেম.সিকিউরিটি.প্রিন্সিপাল.উন্ডোসআইডেন্টিটি.গেটকন্টেন্ট () নামটি উইন্ডোজে লগইন করা বর্তমান ব্যবহারকারীর নাম দেয়, ওপি বর্তমানে ওয়েব সাইটে লগইন করা ব্যবহারকারীকে জিজ্ঞাসা করছে।
গ্র্যান্ডমাস্টারফ্লুশ

4

এটি মূল্যবান কিসের জন্য, এএসপি.নেট এমভিসি 3 এ আপনি কেবলমাত্র ব্যবহারকারীকে ব্যবহার করতে পারেন যা বর্তমান অনুরোধের জন্য ব্যবহারকারীকে ফিরিয়ে দেয়।


4

আপনি যদি আপনার লগইন পৃষ্ঠার অভ্যন্তরে থাকেন, উদাহরণস্বরূপ লগইন ইউজার_লগডইন ইভেন্টে, কারেন্ট.ইউজার.আইডেন্টিটি.নাম একটি খালি মান ফেরত দেবে, তাই আপনাকে আপনার লোগিনকন্ট্রোলনাম.উসরের নাম সম্পত্তিটি ব্যবহার করতে হবে।

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



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 এর সাথে কথা বলার জন্য যে কোনও কিছু চালনার জন্য বেশ কয়েকটি পরিবর্তন এবং ধৈর্য দরকার। যেহেতু কোনও ওয়েব সার্ভার বনাম স্থানীয় আইআইএস / আইআইএস এক্সপ্রেসে এটি চালানোর সময় এটি অ্যাপপুলের পরিচয় হিসাবে চালিত হয়, তাই আপনাকে সাইটটি যে কেউ আঘাত করবে তার নকল করতে আপনাকে এটি সেট আপ করতে হবে।

আপনার এএসপি.এনইটি এমভিসি অ্যাপ্লিকেশনটি নেটওয়ার্কের অভ্যন্তরে কোনও ওয়েব সার্ভারে চলমান অবস্থায় কীভাবে সক্রিয় ডিরেক্টরিতে বর্তমান লগ ইন হওয়া ব্যবহারকারীকে পাবেন:

// 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" />

আপনার অবশ্যই ওয়েবকনফাইগে উইন্ডোজ প্রমাণীকরণ থাকতে হবে:

<authentication mode="Windows" />

আমি এটি বিশ্বাস করি না, কারণ এটি আপনার সক্রিয় ডিরেক্টরি ব্যবহারকারীর শংসাপত্রগুলি স্পষ্টভাবে ব্যবহার করছে। আপনি যদি ব্যবহারকারীদের AD এর মাধ্যমে প্রমাণীকরণ করতে চান তবে কেন আপনার 'ফর্ম' থাকবে?
বিউ ডি'আমোর

আমাদের সংস্থায়, এমন কয়েকটি অবস্থান রয়েছে যেখানে আমাদের বেশ কয়েকটি ওয়ার্কস্টেশন রয়েছে যা বেশ কয়েকটি "ফিল্ড" কর্মী দ্বারা ভাগ করা হয়। তার কারণে, আমাদের আমাদের ইন্ট্রানেট ওয়েব অ্যাপ্লিকেশনগুলিতে লগইন পৃষ্ঠা যুক্ত করতে হবে।
পাটি গুটি

কার্যকারণ হিসাবে: আপনার এই অ্যাপ্লিকেশনের দুটি অনুলিপি চলতে পারে, এটির নিজস্ব ফর্মের একটি 'ফর্ম' মোডে এটির নিজস্ব পরিচয় টেবিল রয়েছে বা আপনি একটি অ্যাপ্লিকেশনে উভয়ই মিশ্রিত করতে পারেন তবে এটি আরও জটিল। একটি তাত্ক্ষণিক গুগল এটি প্রকাশ করেছে: stackoverflow.com/questions/2250921/…
Beau

<পরিচয় ছদ্মবেশী = "সত্য" /> মেশানো থাকলে পরিবর্তনের প্রয়োজন হতে পারে
Beau D'Amore


1

আইআইএস ম্যানেজারে, প্রমাণীকরণের অধীনে, অক্ষম করুন: 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;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.