Twitter: verificação nome de usuário e senha em C #
Pergunta
Recompensa Pergunta ??em>
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)?
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;
}