Вопрос

Вопрос о вознаграждении

Я использую c # 3.5 Window Forms Application. Я использую код, указанный в принятом ответе. и я получаю ошибку ниже

Удаленный сервер возвратил ошибку: (401) не авторизован.

Пример кода для проверки имени пользователя и пароля будет очень полезен

Завершается вопрос о вознаграждении

<Ч>

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

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

Twitter twitter = new Twitter("username", "password", "source"); 
twitter.Status.Update("update");

Конструкция объекта Twitter не выдает исключение, если имя пользователя / пароль неверны. Это, вероятно, потому что ничего не отправлено в этой точке С другой стороны, обновление статуса вызывает исключение, если имя пользователя / пароль неверны.

Моя проблема в том, что я хочу подтвердить имя пользователя / пароль в точке ввода пользователя, а не при попытке опубликовать обновление.

Как я могу подтвердить имя пользователя / пароль, не публикуя что-либо (в Twitterizer или иным способом)?

Это было полезно?

Решение

Бегло взглянув на API verify_credentials, как упомянуто peSHIr, я написал небольшую процедуру, которая, похоже, помогает. Уже поздно, но я смог проверить это пару раз и, похоже, работает.

В моей функции я просто возвращаю true, если я получаю HttpResponseCode.OK, и false, если я получаю что-то еще или выдается исключение. Если твиттеру не нравятся uid / пароль, будет выдано исключение с ошибкой 401 (не авторизовано).

public bool CheckTwitterCredentials(string UserName, string Password)
{
    // Assume failure
    bool Result = false;

    // A try except block to handle any exceptions
    try {
        // Encode the user name with password
        string UserPass = Convert.ToBase64String(
            System.Text.Encoding.UTF8.GetBytes(UserName + ":" + Password));

        // Create our HTTP web request object
        HttpWebRequest Request = 
            (HttpWebRequest)WebRequest.Create("http://twitter.com/account/verify_credentials.xml");

        // Set up our request flags and submit type
        Request.Method = "GET";
        Request.ContentType = "application/x-www-form-urlencoded";

        // Add the authorization header with the encoded user name and password
        Request.Headers.Add("Authorization", "Basic " + UserPass);

        // Use an HttpWebResponse object to handle the response from Twitter
        HttpWebResponse WebResponse = (HttpWebResponse)Request.GetResponse();

        // Success if we get an OK response
        Result = WebResponse.StatusCode == HttpStatusCode.OK;
    } catch (Exception Ex) {
        System.Diagnostics.Debug.WriteLine("Error: " + Ex.Message);
    }

    // Return success/failure
    return Result;
}

Другие советы

Я использовал другие библиотеки Twitter, но ни одна из них не поддерживает проверку правильности имени пользователя и пароля. Это может быть связано с тем, что в Twitter API нет средства для проверки имени пользователя и пароля, если только мы не попытаемся сделать что-то, требующее аутентификации.

Вы можете попытаться получить список друзей или любые другие методы, требующие аутентификации.

Twitter API не поддерживает имя пользователя и пароль уже много лет. Вместо этого у вас есть OAuth, который позволяет пользователю разрешить вашему приложению действовать от его имени. В Twitter есть account / verify_credentials конечная точка, которую можно использовать для проверки пользователь, у которого есть токены, все еще авторизует ваше приложение. Вот пример того, как вы можете вызвать эту конечную точку с помощью LINQ to Twitter:

        var accounts =
            from acct in twitterCtx.Account
            where acct.Type == AccountType.VerifyCredentials
            select acct;

Вы можете посетить Account / VerifyCredentials документацию для получения более подробной информации.

как сообщил @ joe-mayo, вы должны переключиться на OAuth. Твиттер истек v1 их API, и они задокументировали это в следующем URL https://dev.twitter.com/ документы / чаво # 17750 .

Вот функция, которую я написал, которая будет проверять имя пользователя и пароль Twitter в C #:

public bool isTwitterValid(string username, string password)
{
    try
    {
        string user = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password));
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://twitter.com/statuses/verify.xml");

        request.Method = "POST";
        request.ServicePoint.Expect100Continue = false;
        request.Headers.Add("Authorization", "Basic " + user);
        request.ContentType = "application/x-www-form-urlencoded";
        WebResponse response = request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string responseString = reader.ReadToEnd();
        reader.Close();
    }
    catch (Exception ex)
    {
        if (ex.Message.Contains("404")) { return true; }
    }
    return false;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top