mvc.net получить информацию о профиле из твиттера - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь получить информацию о профиле из Twitter после аутентификации с использованием стандартной внешней аутентификации mvc.net.

Я могу сделать это для Facebook с помощью приведенного ниже кода (необходим установленный Facebook SDK), расположенного в функции ExternalLoginCallback.

 if (string.Equals(loginInfo.Login.LoginProvider, "facebook", StringComparison.CurrentCultureIgnoreCase))
        {
            var identity = AuthenticationManager.GetExternalIdentity(DefaultAuthenticationTypes.ExternalCookie);
            var access_token = identity.FindFirstValue("FacebookAccessToken");
            var fb = new FacebookClient(access_token);

            // you need to specify all the fields that you want to get back
            dynamic myInfo = fb.Get("/me?fields=email,first_name,last_name");
            email = myInfo.email;
            firstName = myInfo.first_name;
            lastName = myInfo.last_name;
        }

Я ищу твиттер-эквивалент.

TIA

1 Ответ

0 голосов
/ 25 апреля 2019

Итак, вот что я сделал, основываясь главным образом на этом

Получить токен доступа токен asp.net личность

Сначала я установил пакет TwitterinviAPI nuget в соответствии с предложением @Mate выше.

Во-вторых, я обновил раздел Twitter ConfigureAuth в StartUp.Auth.cs, добавив в него «Провайдер»

app.UseTwitterAuthentication(new TwitterAuthenticationOptions()
        {
            ConsumerKey = ConfigurationManager.AppSettings["TwitterConsumerKey"],
            ConsumerSecret = ConfigurationManager.AppSettings["TwitterConsumerSecret"],
            Provider = new LinqToTwitterAuthenticationProvider(),
            BackchannelCertificateValidator = new Microsoft.Owin.Security.CertificateSubjectKeyIdentifierValidator(new[]
                {
                   "A5EF0B11CEC04103A34A659048B21CE0572D7D47", // VeriSign Class 3 Secure Server CA - G2
                   "0D445C165344C1827E1D20AB25F40163D8BE79A5", // VeriSign Class 3 Secure Server CA - G3
                   "7FD365A7C2DDECBBF03009F34339FA02AF333133", // VeriSign Class 3 Public Primary Certification Authority - G5
                   "39A55D933676616E73A761DFA16A7E59CDE66FAD", // Symantec Class 3 Secure Server CA - G4
                   "‎add53f6680fe66e383cbac3e60922e3b4c412bed", // Symantec Class 3 EV SSL CA - G3
                   "4eb6d578499b1ccf5f581ead56be3d9b6744a5e5", // VeriSign Class 3 Primary CA - G5
                   "5168FF90AF0207753CCCD9656462A212B859723B", // DigiCert SHA2 High Assurance Server C‎A 
                   "B13EC36903F8BF4701D498261A0802EF63642BC3" // DigiCert High Assurance EV Root CA
                 }),
        });

В-третьих, я добавил класс LinqToTwitterAuthenticationProvider в Model / IdentityModels (хотя вы можете разместить этот код в любом месте)

public class LinqToTwitterAuthenticationProvider : TwitterAuthenticationProvider
{
    public const string AccessToken = "TwitterAccessToken";
    public const string AccessTokenSecret = "TwitterAccessTokenSecret";

    public override Task Authenticated(TwitterAuthenticatedContext context)
    {
        context.Identity.AddClaims(
            new List<Claim>
            {
            new Claim(AccessToken, context.AccessToken),
            new Claim(AccessTokenSecret, context.AccessTokenSecret)
            });

        return base.Authenticated(context);
    }

Наконец, я обновил ExternalLoginCallback в контроллере учетных записей следующим кодом, чтобы получить информацию о пользователе из twitter

  else if (string.Equals(loginInfo.Login.LoginProvider, "twitter", StringComparison.CurrentCultureIgnoreCase))
        {
            // Generate credentials that we want to use
            var identity = AuthenticationManager.GetExternalIdentity(DefaultAuthenticationTypes.ExternalCookie);
            var access_token = identity.FindFirstValue(LinqToTwitterAuthenticationProvider.AccessToken);
            var access_token_secret = identity.FindFirstValue(LinqToTwitterAuthenticationProvider.AccessTokenSecret);
            var creds = new TwitterCredentials(ConfigurationManager.AppSettings["TwitterConsumerKey"], ConfigurationManager.AppSettings["TwitterConsumerSecret"],access_token, access_token_secret);
            var authenticatedUser = Tweetinvi.User.GetAuthenticatedUser(creds);
            email = authenticatedUser.Email;
            firstName = authenticatedUser.Name.Substring(0, authenticatedUser.Name.IndexOf(' '));
            lastName = authenticatedUser.Name.Substring(authenticatedUser.Name.IndexOf(' ') + 1);

        }

Был один маленький GOTCHYA. Электронная почта даже после всего этого была нулевой. Проблема заключалась в том, что в моем приложении для твиттера я не указал URL-адрес конфиденциальности или ToS и, следовательно, не смог проверить опцию на вкладке разрешений, чтобы запросить электронную почту пользователей. Просто дружелюбный FYI.

Надеюсь, это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...