Как использовать DotNetOpenAuth для получения emailId пользователей Google - PullRequest
1 голос
/ 28 декабря 2010

Я пытаюсь использовать DotNetOpenAuthto аутентифицированного пользователя, которого я могу сделать.Но я не могу найти способ получить дополнительные параметры, такие как электронная почта, имя, фамилия и т. Д., Предоставляемые Google.

Фрагмент кода, который я использую:

<%@ Register Assembly="DotNetOpenAuth" Namespace="DotNetOpenAuth.OpenId.RelyingParty" TagPrefix="rp" %>

...............................

<rp:OpenIdButton runat="server" ID="OpenIdTextButton1"
    OnLoggedIn="OpenIdTextBox1_LoggedIn"
    Text="aaaa"
    Identifier="https://www.google.com/accounts/o8/id" 
    />

1 Ответ

4 голосов
/ 30 декабря 2010

Несколько подсказок в моем сообщении в блоге Как практически гарантировать, что вы можете получить адрес электронной почты с OpenID .

Короче говоря, вам нужно активировать поведение AXFetchAsSregTransform :

<configuration>
   <configSections>
      <section name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true"/>
   </configSections>
   <dotNetOpenAuth>
      <openid>
         <relyingParty>
            <behaviors>
               <!-- The following OPTIONAL behavior allows RPs to use SREG only, but be compatible
                    with OPs that use Attribute Exchange (in various formats). -->
               <add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth" />
            </behaviors>
         </relyingParty>
      </openid>
   </dotNetOpenAuth>
</configuration>

И затем вам нужно сообщить провайдеру, что вам требуется адрес электронной почты пользователя. В идеале это должно быть сделано так:

<rp:OpenIdButton runat="server"
    Text="Log in with Google"
    Identifier="https://www.google.com/accounts/o8/id">
    <Extensions>
        <sreg:ClaimsRequest Email="Require" />
    </Extensions>
</rp:OpenIdButton>

Однако в DotNetOpenAuth есть ошибка (v3.4.7 исправляет это), которая не позволяет тегу <Extensions> работать на OpenIdButton. Поэтому вместо этого вы должны добавить запрос атрибута в свой код. Итак, ваш тег выглядит так:

<rp:OpenIdButton runat="server"
    Text="Log in with Google"
    OnLoggingIn="OpenId_LoggingIn" 
    Identifier="https://www.google.com/accounts/o8/id" />

А у вашего кода есть такой метод:

protected void OpenId_LoggingIn(object sender, OpenIdEventArgs e) {
    e.Request.AddExtension(new ClaimsRequest() { Email = DemandLevel.Require });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...