Pergunta

Recompensa Pergunta

Eu estou usando c # 3.5 Janela formulários de candidatura. Eu estou usando o código mencionado na resposta aceita. e eu estou ficando abaixo de erro

O servidor remoto retornou um erro:. (401) não autorizado

Código de amostra para verificar o usuário e senha será muito apreciado

Recompensa Pergunta Termina


Eu tenho um aplicativo com o caso de uso seguinte: quando o usuário primeiro começa a usar o aplicativo, ele insere seu nome de usuário e senha. Em seguida, numa fase muito mais tarde, o aplicativo pode atualizar seu status.

Atualmente estou usando Twitterizer, mas acredito que a questão está além do alcance da biblioteca específica que estou usando. A seguir estão as duas linhas relevantes de código:

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

A construção do objeto Twitter não lançar uma exceção se o nome de usuário / senha está incorreta. Isto é provavelmente porque nada é enviado neste momento. Por outro lado, a atualização de status faz lançar uma exceção se o nome de usuário / senha são inválidos.

O meu problema é que eu quero para validar o nome de usuário / senha no ponto de entrada do usuário, e não quando tentando postar a atualização.

Como posso validar o nome de usuário / senha sem postar nada (em Twitterizer ou não)?

Foi útil?

Solução

Dando uma olhada rápida no API verify_credentials como mencionado por peSHIr, escrevi uma pequena rotina que parece fazer o truque. É tarde, mas eu era capaz de testá-lo um par de vezes e parece funcionar.

Na minha função, eu apenas estou retornando true se eu recebo uma HttpResponseCode.OK, e falso se eu conseguir qualquer outra coisa ou uma exceção é lançada. Se o Twitter não como o uid / password uma exceção será lançada com um erro 401 (não autorizado).

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;
}

Outras dicas

Você pode tentar usar a chamada API conta / verify_credentials . Esperemos que a biblioteca API que você já usa suporta isso .. Twitter é notório agora para realmente odiar os programadores de terceiros, a menos que você tenha uma boa razão para fazer algo com o Twitter, apenas ficar longe ...

Eu tenho usado outros Bibliotecas Twitter, mas nenhum deles apoiar a verificação do nome de usuário e senha para validitity. Isso pode ser porque o Twitter API não tem a possibilidade de validar o nome de usuário e senha, a menos que tentamos fazer algo que requer autenticação.

Uma coisa que você pode fazer é tentar obter lista de amigos ou quaisquer outros métodos que requer autenticação.

Twitter API não apoiou nome de usuário / senha em anos. Em vez disso, você tem OAuth, que permite que o usuário autorizar seu aplicativo para agir em seu nome. Twitter tem um conta / verify_credentials endpoint você pode usar para verificar se o usuário que está fichas você tem ainda autoriza a sua aplicação. Aqui está um exemplo de como você poderia chamar este endpoint com o LINQ to Twitter:

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

Você pode visitar Conta / documentação VerifyCredentials para mais detalhes :

como @ joe-mayo informado, você tem que mudar para OAuth. Twitter expirou v1 de sua API e documentado que no seguinte endereço https://dev.twitter.com/ docs / faq # 17750 .

Aqui está uma função que eu escrevi que irá verificar o Twitter nome de usuário e senha em 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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top