简体   繁体   中英

LinqToTwitter user authorization ASP.NET MVC

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.

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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM