LinqToTwitter проверка авторизации

У меня есть этот рабочий код:

public AspNetAuthorizer Authoriser { get; set; }

protected async void Page_Load(object sender, EventArgs e)
{
    var currentUser = v2.Membership.Functions.GetLoggedInAsUser();

    Authoriser = v3.Twitter.Auth.GetUserAuthorizer(currentUser.UserID,
        v3.Arcade.Settings.TwitterScirraArcadeAppAppName, v3.Arcade.Settings.TwitterScirraArcadeAppConsumerKey,
        v3.Arcade.Settings.TwitterScirraArcadeAppConsumerSecret);

    if (!Page.IsPostBack && Request.QueryString["oauth_token"] != null)
    {
        await Authoriser.CompleteAuthorizeAsync(Request.Url);
        var credentials = Authoriser.CredentialStore;
        v3.Twitter.Auth.SaveAuthorisationDetails(currentUser.UserID,
            v3.Arcade.Settings.TwitterScirraArcadeAppAppName, credentials.OAuthToken, credentials.OAuthTokenSecret,
            credentials.ScreenName);
    }
    else
    {
        if (!Authoriser.CredentialStore.HasAllCredentials())
        {
            await Authoriser.BeginAuthorizeAsync(new Uri("https://127.0.0.1/newarcade/twitterpopup.aspx"));
        }
    }
}

Если авторизация не сохранена, она перенаправляет на запрос аутентификации Twitter. В противном случае, это продолжается на странице.

Проблема, с которой я сталкиваюсь, заключается в том, что, когда пользователь аннулирует доступ к приложению через свою учетную запись Twitter, как я могу обнаружить на этой странице, что приложение больше не имеет разрешения на публикацию твитов для пользователя и нуждается в повторной авторизации?

1 ответ

Решение

Вы можете запросить VerifyCredentials:

        try
        {
            var verifyResponse =
                await
                    (from acct in twitterCtx.Account
                     where acct.Type == AccountType.VerifyCredentials
                     select acct)
                    .SingleOrDefaultAsync();

            if (verifyResponse != null && verifyResponse.User != null)
            {
                User user = verifyResponse.User;

                Console.WriteLine(
                    "Credentials are good for {0}.",
                    user.ScreenNameResponse); 
            }
        }
        catch (TwitterQueryException tqe)
        {
            Console.WriteLine(tqe.Message);
        }

Если это не удается, вы можете принудительно выполнить авторизацию, удалив ключи учетных данных пользователя и авторизуясь только с помощью ConsumerKey/ConsumerSecret. Это приведет пользователя на страницу Twitter, чтобы снова авторизовать ваше приложение. Затем вы можете повторно сохранить эти учетные данные пользователя, если они изменились.

Другие вопросы по тегам