LinqToTwitter用户授权ASP.NET MVC

时间:2014-09-09 07:37:54

标签: c# asp.net-mvc asp.net-mvc-5 linq-to-twitter

我在我的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帐户连接,所以我需要检索多个访问令牌。

1 个答案:

答案 0 :(得分:2)

SessionStateCredentialStore以会话状态保存所有用户的令牌。因此,在后续授权中,这些令牌仍然存在,并且授权者不需要用户重新授权您的应用程序。如果您在致电BeginAuthorizationAsync时遇到断点并检查auth.CredentialStore,则会看到OAuthTokenOAuthTokenSecret的填充值。您可以通过清除这些值来让用户切换他们的Twitter用户并重新授权您的应用程序,如下所示:

auth.CredentialStore.OAuthToken = null;
auth.CredentialStore.OAuthTokenSecret = null;