멤버십.getUser ()를 사용하지 않고 ASP.NET 멤버십에서 userID에 액세스하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/146896

문제

어떻게 액세스 할 수 있습니까? UserId ASP.NET 멤버십에서 사용하지 않고 Membership.GetUser(username) ASP.NET 웹 애플리케이션 프로젝트에서?

할 수 있다 UserId 포함됩니다 Profile 옆에 네임 스페이스 UserName (System.Web.Profile.ProfileBase)?

도움이 되었습니까?

해결책 3

나는 사용자가 스스로 사용자의 인증을 작성하기로 결정했으며 (매우 간단하지만 작동합니다) 오래 전에 끝나야합니다.

나의 원래 질문은 userID에 관한 것이며 다음과 같이 사용할 수 없습니다.

System.Web.HttpContext.Current.User.Identity.Name

다른 팁

이 시도:

MembershipUser CurrentUser = Membership.GetUser(User.Identity.Name);
Response.Write("CurrentUser ID :: " + CurrentUser.ProviderUserKey);

userID가 필요할 때마다 데이터베이스 호출을 저장 해야하는 이유는 무엇입니까? 그렇다면 ASP.NET 멤버십 프로보더를 사용할 때는 일반적으로 호출 캐시 또는 캐시 할 수있는 유틸리티 메소드를 캐시 할 수있는 사용자 정의 제공 업체를 수행합니다.

프로필에 넣을 생각이라면 특히 데이터베이스 호출이 필요하며 사용자 정의 프로필 제공 업체를 사용하지 않는 한 처리가 추가되었으므로 처리 할 이유가 많지 않습니다. userID를 구문 분석합니다.

왜 그들이 getUserid 메소드를 구현하지 않았는지 궁금하다면, 단순히 포함 된 제공자와 같이 사용자 ID가 안내가 될 것이라고 항상 보장하지 않기 때문입니다.

편집하다:

보다 Scottgu의 제공자에 관한 기사 a IE SQLMembershipprovider의 실제 소스 코드 다운로드 링크.

그러나 가장 간단한 일은 사용자 객체 또는 유틸리티 클래스의 getUserId () 메소드로, Cache/Session에서 userID를 가져 오면 데이터베이스를 누르면 사용자 이름 (또는 세션에 저장)을 캐시합니다. 그리고 그것을 돌려주십시오.

더 고려할 것을 위해서는 (그러나 쿠키 크기 제한 때문에 매우 조심하십시오) : 양식 인증 : 제공자 및 세션 없음이없는 멤버십, 역할 및 프로필

다음을 시도하십시오.

Membership.GetUser().ProviderUserKey
public string GetUserID()
            {
                MembershipUser _User;
                string _UserId = "";
                _User = Membership.GetUser();
                Guid UserId = (Guid)_User.ProviderUserKey;
                return _UserId = UserId.ToString();
            }

여기에는 두 가지 옵션이 있습니다.

1) 사용자 이름을 사용자 데이터 테이블의 기본 키로 사용하십시오.

select * from [dbo.User] where Username = 'andrew.myhre'

2) 프로필에 userId를 추가하십시오.

각 방법에는 장단점이 있습니다. 개인적으로 나는 첫 번째를 선호합니다. 왜냐하면 그것은 반드시-바깥 쪽 프로필 공급자를 설정할 필요는 없으며 어쨌든 내 시스템에서 고유 한 사용자 이름을 시행하는 것을 선호하기 때문입니다.

Andrew : 기본적으로 표시된 것과 같은 쿼리를 조심스럽게 생각합니다. 그와 일치하는 색인이 없으므로 전체 테이블 스캔의 위험을 실행합니다. 또한 하나 이상의 응용 프로그램에 사용자 데이터베이스를 사용하는 경우 응용 프로그램 ID를 포함하지 않았습니다.

가장 가까운 인덱스는 ASPNET_USERS_INDEX이며 ApplicationID 및 LowerEduserName이 필요합니다.

편집하다:

oops- Andrew의 게시물을 다시 읽고 Aspnet_users 테이블에서 선택 *을 수행하지 않고 오히려 사용자 이름을 기본 키로 사용하여 사용자 정의 프로필/사용자 테이블을 수행하고 있습니다.

이 문제가 있었는데 솔루션은 web.config 구성에 있습니다. Web.Config를 구성하십시오.

 <roleManager
             enabled="true"
             cacheRolesInCookie="true"
             defaultProvider="QuickStartRoleManagerSqlProvider"
             cookieName=".ASPXROLES"
             cookiePath="/"
             cookieTimeout="30"
             cookieRequireSSL="false"
             cookieSlidingExpiration="true"
             createPersistentCookie="false"
             cookieProtection="All">
  <providers>
    <add name="QuickStartRoleManagerSqlProvider"
        type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
        connectionStringName="ASPNETDB"
        applicationName="SecurityQuickStart"/>
  </providers>
</roleManager>
{
MembershipUser m = Membership.GetUser();
Response.Write("ID: " + m.ProviderUserKey.ToString());
}

ASPNET_Membership 테이블의 현재 사용자에 대한 userID (고유 한 식별기)를 제공합니다 - 현재를 성공적으로 로그인했습니다. 성공적인 인증 전에 < %= %> 또는 해당 값을 할당하려고하면 오류가 발생합니다. 객체의 인스턴스로 설정되지 않습니다. "

http://www.tek-tips.com/viewthread.cfm?qid=1169200&page=1

사용해 보셨습니까? System.Web.HttpContext.Current.User.Identity.Name? (그것을 확인하십시오 User 그리고 Identity 먼저 널이 아닌 것입니다.)

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