如何在OAuth 1中使用dropbox.js

时间:2014-08-12 14:19:47

标签: javascript oauth dropbox dropbox-api

我正在重建一个现有的网站,虽然我有旧网站的代码,但在新版本中使用类似的功能时我遇到了一些困难。

以下是该方案:

用户会看到一个Web表单,他们可以输入他们的Dropbox文件以供服务器处理。

用户点击"连接到保管箱按钮"并且在身份验证之后,Web表单接收"令牌"和#34; tokenSecret"它包含在对服务器的POST请求中的值,也包含文件名。

我无法修改的服务器代码,它使用令牌和令牌密码值从dropbox下载文件。

旧代码如下所示:

function connectToDropbox(event)
{
    var client;
    event.preventDefault();
    client = new Dropbox.Client(
    {
        key : "alku14nsuab=|izwocx+Xbnsa297hi/zcbhiwbvlmzvfsfheuzuawrt==",
        sandbox : true
    });

    client.authDriver(new Dropbox.Drivers.Redirect(
    {
        useQuery : false,
        rememberUser : true
    }));

    return client.authenticate(function(error, client)
    {
        $('.dropbox-linked').hide();
        return $('.dropbox-unlinked').show();
    });
} 

写这个避风港的开发者留下了有关Dropbox应用程序的任何细节,所以我做了一个新的。

我执行的那一刻:

client = new Dropbox.Client({ key: "myappskey" });

我明白了:

InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
code: 5
message: "Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded."
name: "InvalidCharacterError"
stack: "Error: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
    at Error (native)
    at atob (http://127.0.0.1:8000/portal/static/js/dropbox.js:56:23)
    at dropboxEncodeKey (http://127.0.0.1:8000/portal/static/js/dropbox.js:1627:16)
    at Oauth.Dropbox.Oauth.Oauth.reset (http://127.0.0.1:8000/portal/static/js/dropbox.js:1512:23)
    at new Oauth (http://127.0.0.1:8000/portal/static/js/dropbox.js:1500:12)
    at new Client (http://127.0.0.1:8000/portal/static/js/dropbox.js:165:20)
    at <anonymous>:2:11
    at Object.InjectedScript._evaluateOn (<anonymous>:704:39)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:643:52)
    at Object.InjectedScript.evaluate (<anonymous>:557:21)"
__proto__: DOMException

显然有些事情是错的,因为我有一个看起来像&#34; spx9kiuauqx0hob&#34;

的密钥

旧代码有:&#34; alku14nsuab = | izwocx + Xbnsa297hi / zcbhiwbvlmzvfsfheuzuawrt ==&#34;

Dropbox的源代码显示它在&#39; |&#39;上分裂。然后调用atob()

我的Dropbox应用控制台会显示应用密钥和密码。它说密钥和密钥通常由服务器应用程序使用,而javascript客户端应用程序应该只使用密钥。

我应该在Dropbox.Client构造函数中放置什么才能使其正常工作?

这是Dropbox.js版本0.7.1

提前致谢

1 个答案:

答案 0 :(得分:2)

当前版本的dropbox.js使用OAuth 2,因此不要求使用app secret。这就是here显示的准备方法:

// Browser-side applications do not use the API secret.
var client = new Dropbox.Client({ key: "your-key-here" });

虽然我们建议将最新版本与OAuth 2一起使用,但在您的情况下,听起来您仍然需要继续使用OAuth 1.在旧版本的dropbox.js(例如,0.7.1)中确实使用过OAuth 1,需要app秘密(OAuth 1工作),并且库以编码格式一起接受密钥和密钥。您可以使用this tool对新的应用密钥和密码进行编码。