1

i am using LinqToTwitter in my asp.net MVC we application and i have the following problem. MY method for signing in using twitter looks like this:

    [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));
    }

The problem i have is that when i first authorize using this code everything works fine - i go to my callback method and store the access token and access token secret of authorized user, but when i try to do it for the second time (while logged out of the twitter) i am not getting redirected to my callback. The hing is that my application user is connected with multiple twitter accounts, so i need to retrieve multiple access tokens.

Łukasz Trzewik
  • 1,165
  • 2
  • 11
  • 26

1 Answers1

2

The SessionStateCredentialStore saves all the user's tokens in Session state. So, on subsequent authorizations those tokens still exist and the authorizer doesn't require the user to re-authorize your application. If you hit a breakpoint on the call to BeginAuthorizationAsync and inspect auth.CredentialStore, you'll see the populated values for OAuthToken and OAuthTokenSecret. you can let the user switch their Twitter user and re-authorize your application by clearing those values, like this:

auth.CredentialStore.OAuthToken = null;
auth.CredentialStore.OAuthTokenSecret = null;
Joe Mayo
  • 7,501
  • 7
  • 41
  • 60