SharePoint 추가 된 HttpModule에서 현재 로그인 한 사용자 가져 오기

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/100976

  •  28-09-2020
  •  | 
  •  

문제

추가 모듈에서 SharePoint에서 사용자가 로그인 한 사용자를 어떻게 얻을 수 있습니까?

다음 코드를 시도했지만 항상 시스템 계정을 얻습니다

   SPUser user = null;

    using (SPSite site = new SPSite(@"siteName"))
    {

        using (SPWeb web = site.OpenWeb())
        {

            user = web.CurrentUser;
        }
    }

 //and

 SPContext.Current.Web.CurrentUser

 //and

  public SPUser GetUserWithElevated()
  {
    SPUser user = null;

    SPSecurity.CodeToRunElevated elevatedSubmit = new 
    SPSecurity.CodeToRunElevated(delegate
    {

         user = SPContext.Current.Web.CurrentUser;
    });
    SPSecurity.RunWithElevatedPrivileges(elevatedSubmit);

    return user;
 }


//this is my Httpmodule: 

 public void Init(HttpApplication context)
{
    context.PreRequestHandlerExecute += new 
 EventHandler(context_PreRequestHandlerExecute);
 }

 void context_PreRequestHandlerExecute(object sender, EventArgs e)
 {
    Page page = HttpContext.Current.CurrentHandler as Page;
    if (page != null)
    {
        // register handler for PreInit event
        page.PreInit += new EventHandler(page_PreInit);
    }
 }

 void page_PreInit(object sender, EventArgs e)
 { //user interception goes here}
.

도움이 되었습니까?

해결책

이미 여기에 답변했습니다 :

Get "계정으로 작동하는 사용자의 현재 기록 된 사용자 이름"

또한 참고 사항 :

  public SPUser GetUserWithElevated()
  {
    SPUser user = null;

    SPSecurity.CodeToRunElevated elevatedSubmit = new 
    SPSecurity.CodeToRunElevated(delegate
    {

         user = SPContext.Current.Web.CurrentUser;
    });
    SPSecurity.RunWithElevatedPrivileges(elevatedSubmit);

    return 
  }
.

시스템 계정에서 실행중인 경우)

또한 다른 답변의 해결책이 실현 될 때 작동하지 않는 경우 ... 귀하의 계정이 시스템 계정에서 실행 중이기 때문에 일 수 있습니다. SharePoint에 로그인 할 때 사용자 이름이 표시됩니까?

모듈 아래 에서이 작업이 필요합니다 :

HttpContext.Current.User.Identity.Name
.

SPContext 메서드를 시도하는 것보다 작동하지 않는 경우 :

SPContext.Current.Web.CurrentUser.LoginName
.

내가 말했듯이, 브라우저의 URL을 처음으로 사용하여 사용하는 계정이 시스템 계정으로 설정되지 않았는지 확인하십시오. RunWitheLevated PR는 시스템 계정으로 표시되는 App Pool 계정을 사용합니다! 제공 한 코드에서는 시스템 계정을 모두 제공하는 세 가지 방법이 있습니까?

더미 계정으로 테스트해야합니다. 현재 사용중인 계정이 아니라는 문제가 아니라

편집

Windows ID를 사용하여 사용자가 할 수있는 것보다 SharePoint로 사용자를 사용하는 경우,

string getCurrentWindowsUserName = WindowsIdentity.GetCurrent().Name;
.

http : // msdn. microsoft.com/en-us/library/vstudio/sfs49sw0(v=vs.100).aspx

다른 계정 유형을 반환하면 web.config에서 web.config에서 보유한 설정에 따라 다르므로 SharePoint Central Admin (System 계정으로 설정 계정으로 설정) :

http://msdn.microsoft.com/en-us/library. /aaa302377.aspx

편집

OK는 아래의 답을 기반으로 해당 코드가 올바른 가치를 지나가는 것으로 작동하고 있다고 말할 수 있습니다! 그것의 잘못된 장소는 두 곳에서 일어날 수 있습니다!

1) 중앙 관리를 GoTo 중앙 관리하고 WebApplication 사용자 정책을 확인하십시오. 사용자를 클릭하고 사용자가 알고있는 사용자 계정에서 시스템 계정이 체크인되지 않은지 확인하는지 확인하십시오.

동일한 문제가 표시되는 SharePoint 사이트에서 로컬 계정을 만들 수 있으므로 위의 강력한 느낌이 아닌가? 따라서이 추정을 기반으로 번호 2 ..

2) Goto IIS 관리자 -> 질문의 사이트 (사이트를 클릭하십시오) -> 고급 옵션을 클릭하십시오 -> 팝업이 나타납니다 -> "물리적 경로 자격 증명"이 비어 있습니다. ... 버튼 '...'을 클릭하면 팝업 -> 응용 프로그램 사용자가 확인되었는지 확인하고 확인을 클릭하십시오!

위의 위의 문제를 해결해야합니다!

다른 팁

다음을 시도하십시오 :

HttpContext.Current.User.Identity.Name
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top