HttpContext.현재 있습니다.사용자.정체성입니다.이름은 항상 문자열입니다.빈
-
20-08-2019 - |
문제
안녕하세요 저는 사용자 지정 MembershipProvider.
을 알고 싶어요 현재 사용자 이름 응용 프로그램을 사용하는 동안 시나리오 그러나려고 할 때에 액세스하 HttpContext.현재 있습니다.사용자.정체성입니다.그것의 이름을 항상 반환 문자열입니다.비어 있습니다.
if (Membership.ValidateUser(tbUsername.Text, tbPassword.Text))
{
FormsAuthentication.SetAuthCookie(tbUsername.Text, true);
bool x = User.Identity.IsAuthenticated; //true
string y = User.Identity.Name; //""
FormsAuthentication.RedirectFromLoginPage(tbUsername.Text, cbRememberMe.Checked);
}
나는 뭔가?
해결책
FormsAuthentication.SetAuthCookie(tbUsername.Text, true);
bool x = User.Identity.IsAuthenticated; //true
string y = User.Identity.Name; //""
문제 있는 이 시점에서 당신은 설정하는 인증 쿠키으로는 iprincipal 에 생성한 내부에 형성 인증 모듈은 일어나지 않을 것이 있을 때까지 새로운 요청이-그래서 그 시점에서 HttpContext.사용자는 이상한 상태입니다.한 번으로 리디렉션 그때 일어나기 때문에,그것은 새로운 요구에서는 브라우저는 쿠키를 얻을 읽기 전에는 당신의 페이지에 도달하고 올바른 사용자 객체를 만듭니다.
쿠키는 단지에서 설정한 후 브라우저는 요청이 완료됩니다.
옆으로 RedirectFromLoginPage 만듭 양식 auth 쿠키는 어쨌든,당신은 당신이 필요하지 않을 수동으로 수행
다른 팁
시도 해주세요 System.Web.HttpContext.Current.Request.LogonUserIdentity.Name
대신에 User.Identity.Name
. 그것은 나를 위해 일했다.
의 가치 HttpContext.Current.User.Identity.Name
전화로 설정됩니다 RedirectFromLoginPage
. 현재 사용자 ID를 얻을 수 있습니다 HttpContext.Current.User.Identity.Name
일단 새 페이지로 리디렉션되면. 이 맥락에서 사용자 속성을 통해 사용자 이름에 액세스 해야하는 이유를 잘 모르겠습니다. tbusername.text에 포함 된 값 만 사용할 수 없습니까?
VS Community 2015 버전에서 웹 양식 응용 프로그램을 작성하면 web.config 노드에서 코드를 자동으로 추가하여 FormsAuthentication을 제거하려면 아래 섹션을 제거하십시오.
<modules>
<remove name="FormsAuthentication"/>
</modules>
이미 제안한대로 FormsAuthentication.RedirectFromLoginPage()
메소드, 인증 쿠키를 자동으로 설정합니다.
그러나 내 경우에는 내가 정리 한 웹 애플리케이션을 중첩했습니다. <httpModules>
아동 응용 프로그램의 태그 (부모 응용 프로그램에서 httpmodules를 상속하지 않도록) web.config
파일. 원치 않는 부모 httpmodules를 제거하면 모든 것이 다시 작동했습니다.
물건을 복잡하게하기 전에이 태그를 확인하는 것이 좋습니다 :)
멤버십 제공 업체의 사용자 이름을 찾고 있다면 이와 같은 것을 시도하십시오 ...
var user = Membership.GetUser( HttpContext.Current.User.Identity.Name );
URL을 사용하거나 URL을 변경하는 경우 비어있는 널 값을 반환 할 수 있습니다. .html에서 .aspx로 URL 경로를 변경하거나 확장이 없을 수 있습니다. 이것은 내 사건의 문제입니다. 당신은 시도해보세요.