我在我的asp.net MVC应用程序中使用LinqToTwitter,我有以下问题。我使用Twitter登录的方法如下:
[Authorize(Roles = UserRoleNames.EmployeeOrManager)]
public virtual async Task<ActionResult> LoginToTwitter(int campaignId)
{
string twitterCallbackUrl = Url.SecureActionAbsolute(MVC.Campaign.TwitterAccessToken(campaignId));
return await TwitterApi.Current.BeginAuthorization(twitterCallbackUrl);
}
public async Task<ActionResult> BeginAuthorization(string twitterCallbackUrl)
{
var auth = new LinqToTwitter.MvcAuthorizer
{
CredentialStore = new LinqToTwitter.SessionStateCredentialStore
{
ConsumerKey = ConfigurationManager.AppSettings["TwitterAppKey"],
ConsumerSecret = ConfigurationManager.AppSettings["TwitterAppSecret"]
}
};
return await auth.BeginAuthorizationAsync(new Uri(twitterCallbackUrl));
}
我遇到的问题是,当我第一次授权使用此代码时,一切正常 - 我转到我的回调方法并存储授权用户的访问令牌和访问令牌秘密,但是当我第二次尝试这样做时(当退出推特时)我没有被重定向到我的回调。 hing是我的应用程序用户与多个Twitter帐户连接,所以我需要检索多个访问令牌。
答案 0 :(得分:2)
SessionStateCredentialStore
以会话状态保存所有用户的令牌。因此,在后续授权中,这些令牌仍然存在,并且授权者不需要用户重新授权您的应用程序。如果您在致电BeginAuthorizationAsync
时遇到断点并检查auth.CredentialStore
,则会看到OAuthToken
和OAuthTokenSecret
的填充值。您可以通过清除这些值来让用户切换他们的Twitter用户并重新授权您的应用程序,如下所示:
auth.CredentialStore.OAuthToken = null;
auth.CredentialStore.OAuthTokenSecret = null;