2

和我之前的许多人一样,我在启动应用程序之间成功保存访问令牌失败得很惨。这个应用程序实际上只会与一个特定的保管箱帐户一起使用,尽管我试图使其易于设置并且更具动态性。

当然,如果设置为空(初始运行),用户可以正确登录并授权应用程序,并返回应用程序按预期工作。然而,在随后的运行中,当它从设置集合中获取令牌和秘密时,它惨遭失败

收到的响应 [未授权]:预计会看到 [OK]。HTTP 响应为 [{"error": "Invalid signature."}]。

我显然做错了什么,这是什么?谢谢!

代码如下!

using System;
using DropNet;

namespace DS_Uploader_DropBox {
    class Program {
        private const string AppKey = "my super secret app key";
        private const string AppSecret = "my super secret app secret";

        static void Main(string[] args) {
            DropNetClient client;
            DropNet.Models.UserLogin token;

            string userToken = Settings.Default.userToken;
            string userSecret = Settings.Default.userSecret;

            bool needAccessToken = (String.IsNullOrEmpty(userToken) || string.IsNullOrEmpty(userSecret));

            //needAccessToken = true;

            if (needAccessToken) {
                client = new DropNet.DropNetClient(AppKey, AppSecret);
                client.UseSandbox = true;
                client.GetToken();

                // Auth with dropbox
                var url = client.BuildAuthorizeUrl();

                // Prompt for user to auth
                Console.WriteLine("go auth here " + url);
                Console.ReadLine();

                // If the user authed, let's get that token
                try {
                    token = client.GetAccessToken();
                }
                catch (Exception e) {
                    Console.WriteLine("Exception! " + e.Message);
                    return;
                }

                // save for later
                userToken = token.Token;
                userSecret = token.Secret;
                Settings.Default.userToken = userToken;
                Settings.Default.userSecret = userSecret;
                Settings.Default.Save();

            } else {
                client = new DropNet.DropNetClient(AppKey, AppSecret, userToken, userSecret);
                client.UseSandbox = true;
                client.GetToken();

                // get that token
                try {
                    token = client.GetAccessToken();
                } catch (Exception e) {
                    Console.WriteLine("Exception! " + e.Message);
                    return;
                }
            }

            var acctInfo = client.AccountInfo();
            Console.WriteLine(acctInfo.display_name);
            Console.ReadLine();
        }
    }
}

遵循的代码:

using System;
using DropNet;

namespace DS_Uploader_DropBox {
    class Program {
        private const string AppKey = "my super secret app key";
        private const string AppSecret = "my super secret app secret";

        static void Main(string[] args) {
            DropNetClient client;
            DropNet.Models.UserLogin token;

            string userToken = Settings.Default.userToken;
            string userSecret = Settings.Default.userSecret;

            bool needAccessToken = (String.IsNullOrEmpty(userToken) || string.IsNullOrEmpty(userSecret));

            //needAccessToken = true;

            if (needAccessToken) {
                client = new DropNet.DropNetClient(AppKey, AppSecret);
                client.UseSandbox = true;
                client.GetToken();

                // Auth with dropbox
                var url = client.BuildAuthorizeUrl();

                // Prompt for user to auth
                Console.WriteLine("go auth here " + url);
                Console.ReadLine();

                // If the user authed, let's get that token
                try {
                    token = client.GetAccessToken();
                }
                catch (Exception e) {
                    Console.WriteLine("Exception! " + e.Message);
                    return;
                }

                // save for later
                userToken = token.Token;
                userSecret = token.Secret;
                Settings.Default.userToken = userToken;
                Settings.Default.userSecret = userSecret;
                Settings.Default.Save();

            } else {
                client = new DropNet.DropNetClient(AppKey, AppSecret, userToken, userSecret);
                client.UseSandbox = true;
            }

            var acctInfo = client.AccountInfo();
            Console.WriteLine(acctInfo.display_name);
            Console.ReadLine();
        }
    }
}
4

1 回答 1

2

needAccessTokenfalse 的代码路径中,您正在调用GetTokenGetAccessToken再次尝试分别获取新的请求令牌和新的访问令牌。这是不必要的,因为您已经拥有并检索了 和 中的现有访问userToken令牌userSecret

于 2015-04-08T20:21:30.633 回答