1

所以我在玩 dropbox.js。在 github 上的入门指南中,用于登录的代码片段是:

client.authenticate(function(error, client) {
  if (error) {
    // Replace with a call to your own error-handling code.
    //
    // Don't forget to return from the callback, so you don't execute the code
    // that assumes everything went well.
    return showError(error);
  }

  // Replace with a call to your own application code.
  //
  // The user authorized your app, and everything went well.
  // client is a Dropbox.Client instance that you can use to make API calls.
  doSomethingCool(client);
});

背景:我正在使用 Dropbox.Drivers.Redirect 驱动程序,因此在调用 client.authenticate() 时,用户会被带到 Dropbox 登录页面,登录,授权我的应用程序,然后被重定向回整个页面过程开始于。

但是,在登录 Dropbox 并重定向回我的页面后,我的 doSomethingCool() 方法(或者实际上,传递给 authenticate() 的回调的任何部分)都被完全忽略了。

但是,如果在调用 authenticate() 时用户已经登录到 Dropbox,则 dropbox.js 不会将它们传送到 dropbox.com(我猜它只是在内部验证当前会话是否有效),而是回调(和doSomethingCool()) 确实被执行了!

我想要做的实际事情是:在我的页面上,用户正在为 web 应用程序选择一种支持存储的方法。一旦他们登录 Dropbox 并被重定向回我的页面,我实际上希望他们转到应用程序的主要部分,而不是这个小选择器屏幕。Dropbox 登录后似乎没有指定不同返回地址的方法,所以我打算在 authenticate() 的回调中使用 window.location.replace 手动完成。但它不起作用:(

一种替代方法是在调用 client.authenticate() 之前使用 AJAX 向我的域发送一个标志 - 以指示用户在 OAuth 流中。然后,当我的服务器再次请求我的选择器屏幕时(通过 Dropbox 登录后的重定向),自动重定向到主应用程序。但这有点乱(不是吗?)

4

0 回答 0