我正在尝试使用Twitter实施OAuth,以便我的用户可以使用他们的Twitter ID登录我的网站。为此,我使用的是TweetSharp库。按照他们的例子,我写了下面的代码,似乎有效。
public ActionResult Login(string oauth_token, string oauth_verifier)
{
var service = new TwitterService(consumerKey, consumerSecret);
if (oauth_token == null)
{
var requestToken = service.GetRequestToken(Request.Url.ToString());
var uri = service.GetAuthorizationUri(requestToken);
return new RedirectResult(uri.ToString(), false);
}
else
{
var requestToken = new OAuthRequestToken { Token = oauth_token };
OAuthAccessToken accessToken = service.GetAccessToken(requestToken, oauth_verifier);
service.AuthenticateWith(accessToken.Token, accessToken.TokenSecret);
TwitterUser user = service.VerifyCredentials(new VerifyCredentialsOptions());
TempData["response"] = string.Format("Your username is {0}", user.ScreenName);
return RedirectToAction("Success");
}
}
public ActionResult Success()
{
ViewBag.Response = TempData["response"];
return View();
}
然而,有一个问题。每次用户登录系统时,Twitter都会要求他们授权应用程序,即使他们之前已经完成了。有没有办法防止这种行为?我还在Facebook和Google上实施了OAuth,每次我想登录系统时都不需要授权应用程序。
答案 0 :(得分:0)
不幸的是,据我所知。 Twitter使用OAuth 1.1而非OAuth 2.0,如Facebook和Google,因此在中间有一个手动步骤,即使用户已经完成,也要求用户对应用程序进行授权。我有完全相同的问题,它似乎是我们必须忍受的东西。
答案 1 :(得分:0)
我遇到的问题与我试图恢复的稍微旧的应用程序有关。我注意到,当我在http://dev.twitter.com/apps的应用设置中选择“使用Twitter登录”时问题就消失了。