我正在重建一个现有的网站,虽然我有旧网站的代码,但在新版本中使用类似的功能时我遇到了一些困难。
以下是该方案:
用户会看到一个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
提前致谢
答案 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对新的应用密钥和密码进行编码。