linqtotwitter - получить сохраненные учетные данные

Я использую библиотеку linqtotwitter, в моем приложении win forms я могу делать api-вызовы в твиттере, но когда я закрыл свое приложение и снова открыл, мне нужно снова повторить ввод PIN-кода ///

в твиттер-программе твитдеск ее нужно только один раз ввести пин-код? Как я могу сделать хорошо, как в самом приложении?

Я читаю:

После авторизации сохраните учетные данные, связанные с этим пользователем. В следующий раз, когда пользователю потребуется выполнить действие с вашим приложением, возьмите сохраненные учетные данные и загрузите все 4 учетные данные в авторизатор. Когда у авторизатора есть все 4 учетных данных, ему больше не нужно выполнять процесс авторизации, и вы можете выполнять запросы без авторизации

НО как это сделать?

1 ответ

Решение

Вы можете прочитать учетные данные после вызова CompleteAuthorizeAsync, например:

        await pinAuth.CompleteAuthorizeAsync(PinTextBox.Text);
        SharedState.Authorizer = pinAuth;

        // This is how you access credentials after authorization.
        // The oauthToken and oauthTokenSecret do not expire.
        // You can use the userID to associate the credentials with the user.
        // You can save credentials any way you want - database, isolated storage, etc. - it's up to you.
        // You can retrieve and load all 4 credentials on subsequent queries to avoid the need to re-authorize.
        // When you've loaded all 4 credentials, LINQ to Twitter will let you make queries without re-authorizing.
        //
        var credentials = pinAuth.CredentialStore;
        string oauthToken = credentials.OAuthToken;
        string oauthTokenSecret = credentials.OAuthTokenSecret;
        string screenName = credentials.ScreenName;
        ulong userID = credentials.UserID;

Итак, вам нужно иметь способ хранить информацию о пользователях. Для простоты я предполагаю, что вы используете базу данных. Ваше хранилище также может быть файлом в любом формате, который вы выберете. Предполагая, что вы используете базу данных, у вас должна быть таблица, содержащая информацию о пользователе, и вы должны знать, кто является пользователем, использующим ваше приложение. У этого пользователя есть идентификатор в вашей таблице, и в таблице должны быть поля для oauthToken и oauthTokenSecret. Вы также можете добавить поля для UserID и ScreenName в Twitter, но они не обязательны для OAuth.

Обратите внимание, что приведенный выше код получает ссылку на CredentialStore от авторизатора, pinAuth. Это происходит после вызова CompleteAuthorizeAsync, поскольку учетные данные недоступны до завершения процесса OAuth. Со ссылкой на учетные данные прочитайте свойства OAuthToken и OAuthToken. Затем напишите код для хранения учетных данных OAuthToken и OAuthTokenSecret в базе данных, связанной с текущим пользователем.

Теперь у вас есть учетные данные для этого пользователя.

При последующих запросах убедитесь, что вы загрузили Authorizer со всеми четырьмя учетными данными: ConsumerKey, ConsumerSecret, OAuthToken и OAuthTokenSecret. Вот пример:

        string oauthToken = null;
        string oauthTokenSecret = null;

        // read OAuthToken and OAuthTokenSecret from the database table where you previously
        // stored OAuthToken and OAuthTokenSecret for this user. Put the OAuthToken and
        // OAuthTokenSecret into the variables named oauthToken and oauthTokenSecret above.

        pinAuth = new PinAuthorizer
        {
            // Get the ConsumerKey and ConsumerSecret for your app and load them here.
            CredentialStore = new InMemoryCredentialStore
            {
                ConsumerKey = ConfigurationManager.AppSettings["consumerKey"],
                ConsumerSecret = ConfigurationManager.AppSettings["consumerSecret"],
                OAuthToken = oauthToken,
                OAuthTokenSecret = oauthTokenSecret
            },
            // Note: GetPin isn't used here because we've broken the authorization
            // process into two parts: begin and complete
            GoToTwitterAuthorization = pageLink => 
                OAuthWebBrowser.Navigate(new Uri(pageLink, UriKind.Absolute))
        };

        if (oauthToken == null)
            await pinAuth.BeginAuthorizeAsync();

Прежде чем создавать экземпляр PinAuthorizer, проверьте, есть ли у вас OAuthToken и OAuthTokenSecret для текущего пользователя. Если вы это сделаете, то заполните ими хранилище Авторизатора CredentialStore. Если нет, оставьте OAuthToken и OAuthTokenSecret пустыми, чтобы LINQ to Twitter прошел через процесс OAuth для получения токенов. Если у вас есть OAuthToken и OAuthTokenSecret, и вы присваиваете их свойствам CredentialStore, то LINQ to Twitter не нужно будет выполнять процесс OAuth, и вы можете использовать авторизатор для выполнения запросов сразу.

Другие вопросы по тегам