首页 文章

无法使用已保存的Oauth凭据将Linq的推文发布到Twitter

提问于
浏览
0

如果我的最终用户被定向到Twitter的Oauth页面并返回我们的网站,我使用Linq到Twitter WebAuthorizer将推文发布到Twitter没有任何问题 . 以这种方式使用WebAuthorizer非常有用 .

但是,如果我尝试存储最终用户的Oauth凭据并将其用于Tweet,我会收到401 Unauthorized错误:

LinqToTwitter.TwitterQueryException:无效或过期的令牌---> System.Net.WebException:远程服务器返回错误:(401)未经授权 . 在LinqToTwitter.TwitterExecute.PostToTwitter [T](String url,IDictionary2 postData,Func2 getResult)---内部异常堆栈跟踪结束---在LinqToTwitter.TwitterExecute.PostToTwitter [T](String url,IDictionary2 postData,Func2 getResult) at LinqToTwitter.StatusExtensions.UpdateStatus(TwitterContext ctx,String status,Decimal latitude,Decimal longitude,String placeID,Boolean displayCoordinates,String inReplyToStatusID,Boolean trimUser,Action`1 callback)at LinqToTwitter.StatusExtensions.UpdateStatus(TwitterContext ctx,String status)at at C:\ TFS \ SC \ Weblink_Connect-Development \ CWT \ External \ WCPages \ v12 \ Test \ TwitterTest.aspx.vb中的External_WCPages_v12_Test_TwitterTest.StoredCredentialsSingleUserAuthorizer()位于C:\的External_WCPages_v12_Test_TwitterTest.Page_Load(Object sender,EventArgs e)的第177行TFS \ SC \ Weblink_Connect-Development \ CWT \ External \ WCPages \ v12 \ Test \ TwitterTest.aspx.vb:第65行

我包括处理Linq到Twitter请求的主要功能 . 请帮忙,我做错了什么?我已尝试发布2.106,2.107,2.108和截至2013年9月19日的最新变更集 .

Private Sub BeginWebAuthorizer()
        'Comment: Triggered on PostBack

        mobj_WebAuthorizer = New WebAuthorizer

        Dim objCredentials As IOAuthCredentials = New InMemoryCredentials()
        objCredentials.ConsumerKey = Me.ConsumerKey
        objCredentials.ConsumerSecret = Me.ConsumerSecret

        mobj_WebAuthorizer.Credentials = objCredentials

        mobj_WebAuthorizer.PerformRedirect = Sub(authUrl)
                                                 Response.Redirect(authUrl)
                                             End Sub
        mobj_WebAuthorizer.BeginAuthorization(Request.Url)
    End Sub

    Private Sub CompleteWebAuthorizer()
        'Comment: Triggered on return from the Twitter authorization page

        Dim objCredentials As IOAuthCredentials = New SingleUserInMemoryCredentials

        objCredentials.ConsumerKey = Me.ConsumerKey
        objCredentials.ConsumerSecret = Me.ConsumerSecret

        mobj_WebAuthorizer = New WebAuthorizer

        mobj_WebAuthorizer.Credentials = objCredentials

        Call mobj_WebAuthorizer.CompleteAuthorization(Request.Url)

        mobj_TwitterContext = New TwitterContext(mobj_WebAuthorizer)

        'Success:  This posts a Tweet
        mobj_TwitterContext.UpdateStatus("Test Tweet using LinqToTwitter WebAuthorizer ( not using stored credentials ) : " & Date.Now.Millisecond.ToString)
    End Sub

    Private Sub StoredCredentialsWebAuthorizer()
        'Comment: Triggered on PostBack

        Dim objCredentials As IOAuthCredentials = New InMemoryCredentials
        'For Testing: Dim objCredentials As IOAuthCredentials = New SingleUserInMemoryCredentials
        'For Testing: Dim objCredentials As IOAuthCredentials = New SessionStateCredentials

        objCredentials.ConsumerKey = Me.ConsumerKey
        objCredentials.ConsumerSecret = Me.ConsumerSecret
        objCredentials.AccessToken = Me.SavedToken
        objCredentials.OAuthToken = Me.SavedTokenSecret

        mobj_WebAuthorizer = New WebAuthorizer

        mobj_WebAuthorizer.Credentials = objCredentials

        'For Testing: Call mobj_WebAuthorizer.CompleteAuthorization(Request.Url)

        mobj_TwitterContext = New TwitterContext(mobj_WebAuthorizer)

        'BUG:  SingleUserAuthorizer doesn't seem to work with the saved credentials from database
        mobj_TwitterContext.UpdateStatus("Test Tweet using LinqToTwitter WebAuthorizer ( using stored credentials ) : " & Date.Now.Millisecond.ToString)
    End Sub

2 回答

  • 0

    看起来问题是你的OAuthToken和AccessToken是向后的 . 这是您应该使用的代码:

    Private Sub StoredCredentialsWebAuthorizer()
            'Comment: Triggered on PostBack
    
            Dim objCredentials As IOAuthCredentials = New InMemoryCredentials
            'For Testing: Dim objCredentials As IOAuthCredentials = New SingleUserInMemoryCredentials
            'For Testing: Dim objCredentials As IOAuthCredentials = New SessionStateCredentials
    
            objCredentials.ConsumerKey = Me.ConsumerKey
            objCredentials.ConsumerSecret = Me.ConsumerSecret
            objCredentials.OAuthToken = Me.SavedToken        ' <= here
            objCredentials.AccessToken = Me.SavedTokenSecret ' <= and here
    
            mobj_WebAuthorizer = New WebAuthorizer
    
            mobj_WebAuthorizer.Credentials = objCredentials
    
            'For Testing: Call mobj_WebAuthorizer.CompleteAuthorization(Request.Url)
    
            mobj_TwitterContext = New TwitterContext(mobj_WebAuthorizer)
    
            'BUG:  SingleUserAuthorizer doesn't seem to work with the saved credentials from database
            mobj_TwitterContext.UpdateStatus("Test Tweet using LinqToTwitter WebAuthorizer ( using stored credentials ) : " & Date.Now.Millisecond.ToString)
         End Sub
    
  • 0

    谢谢你的帮助,乔 .

    我的OAuthToken不是以[TwitterAccnt#] - xxxxx开头的 . 我对我的方法进行了一些验证,并立即以我的方式看到了错误 .

    Private Sub Authorize(Optional UseSavedUserCredentials As Boolean = True)
        'Comment: Triggered on PostBack
        Dim objCredentials As IOAuthCredentials = New InMemoryCredentials
    
        objCredentials.ConsumerKey = Me.ConsumerKey
        objCredentials.ConsumerSecret = Me.ConsumerSecret
    
        If UseSavedUserCredentials = True Then
            If Me.SavedToken.Contains("-") = True And Me.SavedTokenSecret.Contains("-") = False Then
                objCredentials.OAuthToken = Me.SavedToken
                objCredentials.AccessToken = Me.SavedTokenSecret
            Else
                Throw New Exception("Incorrect credentials

    ") End If Else If Me.DevAccountToken.Contains("-") = True And Me.DevAccountTokenSecret.Contains("-") = False Then objCredentials.OAuthToken = Me.DevAccountToken objCredentials.AccessToken = Me.DevAccountTokenSecret Else Throw New Exception("Incorrect credentials

    ") End If End If mobj_WebAuthorizer = New WebAuthorizer mobj_WebAuthorizer.Credentials = objCredentials mobj_TwitterContext = New TwitterContext(mobj_WebAuthorizer) End Sub

相关问题