ในแบบฟอร์มฉันใช้เพื่อรับผู้ใช้ที่เข้าสู่ระบบในปัจจุบันโดย:
Page.CurrentUser
ฉันจะรับผู้ใช้ปัจจุบันภายในคลาสคอนโทรลเลอร์ใน ASP.NET MVC ได้อย่างไร
ในแบบฟอร์มฉันใช้เพื่อรับผู้ใช้ที่เข้าสู่ระบบในปัจจุบันโดย:
Page.CurrentUser
ฉันจะรับผู้ใช้ปัจจุบันภายในคลาสคอนโทรลเลอร์ใน ASP.NET MVC ได้อย่างไร
คำตอบ:
หากคุณต้องการพาผู้ใช้จากภายในคอนโทรลเลอร์ให้ใช้User
คุณสมบัติของคอนโทรลเลอร์ หากคุณจำเป็นต้องใช้มันจากมุมมองของผมจะเติมสิ่งที่คุณต้องการโดยเฉพาะในหรือคุณก็สามารถโทรหาผู้ใช้ตามที่ผมคิดว่ามันเป็นทรัพย์สินของViewData
ViewPage
ฉันพบว่าUser
การทำงานที่เป็นหรือUser.Identity.Name
User.IsInRole("Administrator")
Imports System.Web
และยังมีคุณสมบัติที่มีด้วยHttpContext.Current.User.Identity.Name
หรือโดยตรงมีสิทธิ์ใช้ไวยากรณ์เต็ม:System.Web.HttpContext.Current.User.Identity.Name
ลองHttpContext.Current.User
ดู
ทรัพย์สินสาธารณะที่ใช้ร่วมกันในปัจจุบัน () เป็น System.Web.HttpContext
สมาชิกของ System.Web.HttpContextสรุป:
ได้รับหรือการตั้งค่าวัตถุ System.Web.HttpContext สำหรับการร้องขอ HTTP ปัจจุบันReturn Values:
The System.Web.HttpContext สำหรับคำขอ HTTP ปัจจุบัน
คุณสามารถรับชื่อผู้ใช้ใน ASP.NET MVC4 ดังนี้
System.Web.HttpContext.Current.User.Identity.Name
'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
ฉันรู้ว่านี่เก่ามาก แต่ฉันเพิ่งเริ่มต้นกับ ASP.NET MVC ดังนั้นฉันคิดว่าฉันติดสองเซ็นต์ของฉันใน:
Request.IsAuthenticated
บอกคุณว่าผู้ใช้รับรองความถูกต้องหรือไม่Page.User.Identity
ให้ข้อมูลประจำตัวของผู้ใช้ที่เข้าสู่ระบบฉันใช้:
Membership.GetUser().UserName
ฉันไม่แน่ใจว่าสิ่งนี้จะทำงานใน ASP.NET MVC แต่คุ้มค่ากับการถ่ายภาพ :)
การเข้าสู่ระบบชื่อผู้ใช้: System.Web.HttpContext.Current.User.Identity.Name
เพื่ออ้างอิง ID ผู้ใช้ที่สร้างขึ้นโดยใช้การรับรองความถูกต้องแบบง่ายที่มีอยู่ใน ASP.NET MVC 4 ในคอนโทรลเลอร์เพื่อวัตถุประสงค์ในการกรอง (ซึ่งมีประโยชน์หากคุณใช้ฐานข้อมูลก่อนและ Entity Framework 5 เพื่อสร้างการผูกรหัสแรกและตารางของคุณ ว่าจะใช้รหัสต่างประเทศกับ ID ผู้ใช้) คุณสามารถใช้
WebSecurity.CurrentUserId
เมื่อคุณเพิ่มคำสั่งที่ใช้
using System.Web.Security;
System.Security.Principal.WindowsIdentity.GetCurrent().Name
MVC 5
อย่างไรก็ตามที่ดึงชื่อโดเมนด้วยชื่อผู้ใช้ ie domain \ ชื่อผู้ใช้
เราสามารถใช้รหัสต่อไปนี้เพื่อรับผู้ใช้ที่เข้าสู่ระบบในปัจจุบันใน 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'
ชื่อผู้ใช้ด้วย:
User.Identity.Name
แต่ถ้าคุณต้องการรับ ID คุณสามารถใช้:
using Microsoft.AspNet.Identity;
ดังนั้นคุณจะได้รับ ID ผู้ใช้โดยตรง:
User.Identity.GetUserId();
หน้านี้อาจเป็นสิ่งที่คุณกำลังมองหา:
การใช้ Page.User.Identity.Name ใน MVC3
User.Identity.Name
คุณเพียงแค่ต้อง
System.Security.Principal.WindowsIdentity.GetCurrent().Name
ใช้
สิ่งนี้จะได้รับผู้ใช้ Windows ปัจจุบัน
สำหรับสิ่งที่คุ้มค่าใน ASP.NET MVC 3 คุณสามารถใช้ผู้ใช้ซึ่งส่งคืนผู้ใช้สำหรับคำขอปัจจุบัน
หากคุณอยู่ในหน้าเข้าสู่ระบบของคุณในเหตุการณ์ LoginUser_LoggedIn เช่น Current.User.Identity.Name จะส่งคืนค่าว่างดังนั้นคุณต้องใช้คุณสมบัติ LogLogControlName.UserName ของคุณ
MembershipUser u = Membership.GetUser(LoginUser.UserName);
คุณสามารถใช้รหัสต่อไปนี้:
Request.LogonUserIdentity.Name;
IPrincipal currentUser = HttpContext.Current.User;
bool writeEnable = currentUser.IsInRole("Administrator") ||
...
currentUser.IsInRole("Operator");
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));
หากคุณกำลังทำงานใน Active Directory บนอินทราเน็ตนี่คือเคล็ดลับบางประการ:
(Windows Server 2012)
การเรียกใช้สิ่งใดก็ตามที่พูดคุยกับ AD บนเว็บเซิร์ฟเวอร์ต้องมีการเปลี่ยนแปลงและความอดทน ตั้งแต่เมื่อทำงานบนเว็บเซิร์ฟเวอร์เทียบกับ IIS / IIS Express ในท้องถิ่นมันทำงานในข้อมูลประจำตัวของ 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...
คุณต้องปิดการโทรใด ๆ ที่เกี่ยวข้องกับ 'active directory context' ในรายการต่อไปนี้เพื่อทำหน้าที่เป็นสภาพแวดล้อมการโฮสต์เพื่อรับข้อมูลโฆษณา:
using (HostingEnvironment.Impersonate()){ ... }
คุณต้องimpersonate
ตั้งค่าเป็นจริงใน web.config ของคุณ:
<system.web>
<identity impersonate="true" />
คุณต้องมีการตรวจสอบ Windows ใน web.config:
<authentication mode="Windows" />
ใน Asp.net Mvc Identity 2 คุณสามารถรับชื่อผู้ใช้ปัจจุบันได้โดย:
var username = System.Web.HttpContext.Current.User.Identity.Name;
ในตัวจัดการ 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;