2009-04-07 4 views
5

Gmail 계정에 dotNetOpenId를 사용하여 로그인을 시도하고 있습니다. 작동하지만 어떤 소유권도 검색 할 수 없습니다. 전자 메일 주소 나 사용자 이름도 검색 할 수 있지만 어떤 클레임도 반환되지 않습니다. ClaimedIdentifier 만 사용할 수 있습니다. 누구든지 Gmail 계정에서이 데이터를 검색하는 방법을 알고 있습니까? 클레임 요청 구성에 대한 사례를 제공해 주시면 감사하겠습니다.DotNetOpenId를 통해 Gmail 데이터 검색

감사

답변

2
// Either you're creating this already or you can get to it in 
// the LoggingIn event of the control you're using. 

IAuthenticationRequest request; 

// Add the AX request that says Email address is required. 
var fetch = new FetchRequest(); 
fetch.Attributes.Add(
    new AttributeRequest(WellKnownAttributes.Contact.Email, true)); 
request.AddExtension(fetch); 

구글은 사용자를 인증하고 당신이 얻을 수있는 이메일 주소, 반환

var fetch = openid.Response.GetExtension<FetchResponse>(); 
if (fetch != null) 
{ 
    IList<string> emailAddresses = fetch.GetAttribute(
     WellKnownAttributes.Contact.Email).Values; 
    string email = emailAddresses.Count > 0 ? emailAddresses[0] : null; 
} 

당신은 좀 더 자세한 내용은 주제에 my blog post를 볼 수 있습니다. 여기서 주목해야 할 중요한 점은 위의 스 니펫 에서처럼 사용자가 필요하다고 표시 한 경우에만 Google에서 사용자의 이메일 주소를 알려주는 것입니다. 그러나 이것은 사용자가 자신의 전자 메일 주소를 공유하고 싶지 않으면 전혀 로그인 할 수 없다는 것을 의미합니다. 죄송합니다. Google에서 설정 한 방식입니다. 사람들이 사용하는 다른 제공자는 불행히도 다른 행동을합니다.

+0

답장을 보내 주셔서 감사합니다. 귀하의 솔루션에서 코드를 사용했지만 더 이상 작동하지 않습니다. 전자 메일보다 많은 특성을 포함했기 때문에 생각합니다. 그래서이 솔루션을 사용하게 될 것입니다. .. 당신이 말했듯이 공급자에 의한 교환을 구현하는 데는 신경이 쓰이지 않습니다! ... – Hoghweed

+1

Google은 사용자 당 속성 값을 한 번만 제공한다는 점에서 고유합니다. 따라서 자신의 Google 계정으로 테스트하고 "이 사이트에서 나를 기억하도록 허용"을 클릭하면 다음 번에 이메일 주소가 제공되지 않습니다. RP는 다음에 사용자가 로그인 할 때 값을 저장해야합니다. –

+0

Google에서이 정보를 제공했음을 잊어 버리게 할 수 있습니까? –

관련 문제