Не могат да се публикуват туитове с Linq към Twitter, като се използват запазени идентификационни данни за Oauth

Нямам проблеми с използването на Linq to Twitter WebAuthorizer за публикуване на туитове в Twitter, ако моите крайни потребители са насочени към Oauth страницата на 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) в LinqToTwitter.StatusExtensions.UpdateStatus (TwitterContext ctx, String status, Decimal latitude, Decimal longitude, String placeID, Boolean displayCoordinates, String inReplyToStatusID, Boolean trimUser, Action`1 callback) в LinqToTwitter.StatusExtensions.UpdateStatus(TwitterContext ctx, String status) във External_WCPages_v12_Test_Twitter Test.StoredCredentialsSingleUserAuthorizer() в C:\TFS\SC\Weblink_Connect-Development\CWT\External\WCPages\v12\Test\TwitterTest.aspx.vb:ред 177 в External_WCPages_v12_Test_TwitterTest.Page_Load(Изпращач на обект, EventArgs e) в C:\TFS\SC\Weblink_Connect- Development\CWT\External\WCPages\v12\Test\TwitterTest.aspx.vb:ред 65

Включвам основните функции, които обработват заявките за Linq към Twitter. Моля, помогнете, правя ли нещо нередно? Опитах версии 2.106, 2.107, 2.108 и най-новите набори от промени от 19.09.2013 г.

    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

person user2737539    schedule 19.09.2013    source източник


Отговори (2)


Изглежда, че проблемът е, че имате своите 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
person Joe Mayo    schedule 20.09.2013

Благодаря за помощта ти, Джо.

Моят 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<br/><br/>")
        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<br/><br/>")
        End If
    End If

    mobj_WebAuthorizer = New WebAuthorizer

    mobj_WebAuthorizer.Credentials = objCredentials

    mobj_TwitterContext = New TwitterContext(mobj_WebAuthorizer)
End Sub
person user2737539    schedule 22.09.2013