2012-04-30 3 views
3

Yesod의 OpenId 구현으로 인증 한 후 사용자의 이메일 주소를 검색 할 수있는 방법이 있습니까?Yesod에서 이메일 주소 가져 오기 OpenID

내 테스트 앱에서 리디렉션과 인증이 올바르게 발생하고 maybeAuthId가 내 데이터베이스의 해당 항목에 ID를 제공합니다. 그러나 해당 ID는 URL로 저장됩니다.

나는이 작업을 할 수 있지만, 다른 OpenId 패키지에서 허용하는 것처럼 인증에 사용 된 실제 전자 메일을 얻는 것도 좋습니다. Yesod의 OpenId에서 이것이 가능합니까? authOpenIdExtended를 사용하여 수행 할 수있는 작업이 있습니까 (사용 방법이 불분명 한 경우)?

답변

2

다시에보고 후, 내가 대답을 발견

authPlugins _ = [authOpenIdExtended [("openid.ns.ax", "http://openid.net/srv/ax/1.0"), 
            ("openid.ax.mode", "fetch_request"), 
            ("openid.ax.type.email", "http://axschema.org/contact/email"), 
            ("openid.ax.required", "email") 
            ]] 

내가이 페이지에서이 값을 발견 : https://developers.google.com/accounts/docs/OpenID을하고이를 확인

첫째, 우리는 올바른 매개 변수와 함께 authOpenIdExtended를 사용해야합니다 Google과 Yahoo와 협력 할 수 있습니다.

그런 다음 검색된 전자 메일 주소를 사용하기 위해 getAuthId에 전달 된 creds 매개 변수에 대해 "credsExtra creds"를 호출합니다. 그러면 OpenId 공급자의 응답이 포함 된 튜플 목록이 제공됩니다. 위의 매개 변수를 사용하여 authOpenIdExtended를 사용하면 값이 "openid.ax.value.email"(야후 용) 또는 "openid.ext1.value.email"(Google 용) 인 키/값 튜플에서 이메일을 찾습니다. Google이 "openid.ax.value.email"키도 사용하기를 기대했지만 충분히 가까웠습니다.

이 정보가 도움이되기를 바랍니다.

3

GoogleEmail 모듈을 살펴보십시오. 당신이 명심할 필요가있는 한 가지 점은 모든 OpenID 제공 업체를 반드시 신뢰할 수 없다는 것입니다. 중요한 이메일 주소를 사용하는 경우, 사악한 사용자는 OpenID 제공 업체를 설정하여 원하는 주소로 청구 할 수 있습니다.

+0

authOpenIdExtended (GoogleEmail.hs의 옵션 목록 복사)를 사용하는 방법을 이해하고 있다고 생각하지만, 일단 처리기에서 돌아 왔으면 이메일 주소를받는 방법을 알지 못합니다. GoogleEmail.hs에서 lookupGetParam에 대한 호출이 있지만 코드에 다시 들어가면 너무 늦습니다. 맞습니까? 무슨 일이 일어나고 있는지 내가 잘못 읽었나요? 중요하다면 나는 yesod-auth 1.0.1을 사용하고있다. –

+0

이메일 주소를 중요하게 사용하지 않는 것에 관해서도 좋은 지적을합니다. 내 ID는 OpenId를 통해 반환 된 ID를 기반으로 할 것이므로 이메일 주소를 편리하게 사용하려고합니다. –

+0

나는 authOpenIdExtended를 통해 직접 시도하지 않았지만 [credsExtra] (http://hackage.haskell.org/packages/archive/yesod-auth/1.0.2/doc/html/Yesod-Auth.html#v)라고 생각합니다. : credsExtra)에 필요한 정보가 있습니다. –