2014-12-01 83 views
1

我有这样的工作代码: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帐户撤销对应用程序的访问时,如何在此页面上检测到应用程序不再有权向用户发布Tweets并需要重新授权?

回答

2

可以查询的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页面再次授权您的应用。然后,您可以重新保存这些用户凭证,以防他们更改。