是否存储Dropbox身份验证?

时间:2012-11-15 作者:emd

我正在尝试创建一个Wordpress插件,将每个博客文章导出到我的dropbox文件夹。代码如下,但我有一个问题。

如果我在Wordpress之外运行这段代码,它会工作得很好。创建表并存储我的令牌。如果我使用不同的浏览器,它可以完美地工作。。。没有身份验证,因为它从DB读取。

我的问题是,当我将其放入插件时,根本没有创建表。因此,如果我转到其他浏览器,我必须重新验证。

请帮忙。

代码:

/*
 * Copyright 2012 Erin Dalzell.
 *
 */

require_once(\'Dropbox/API.php\');
require_once(\'Dropbox/Exception.php\');
require_once(\'Dropbox/OAuth/Consumer/ConsumerAbstract.php\');
require_once(\'Dropbox/OAuth/Consumer/Curl.php\');
require_once(\'Dropbox/OAuth/Storage/Encrypter.php\');
require_once(\'Dropbox/OAuth/Storage/StorageInterface.php\');
require_once(\'Dropbox/OAuth/Storage/Session.php\');
require_once(\'Dropbox/OAuth/Storage/Filesystem.php\');
require_once(\'Dropbox/OAuth/Storage/PDO.php\');

include ABSPATH . \'/wp-config.php\';

function etd_initialize() {

global $current_user;

    // Set your consumer key, secret and callback URL
    // should be in the settings
    $key      = \'xxxxx\';
    $secret   = \'yyyyy\';
    $current_user = wp_get_current_user();

    // Check whether to use HTTPS and set the callback URL
    $protocol = (!empty($_SERVER[\'HTTPS\'])) ? \'https\' : \'http\';
    $callback = $protocol . \'://\' . $_SERVER[\'HTTP_HOST\'] . $_SERVER[\'REQUEST_URI\'];


    // Instantiate the Encrypter and storage objects
    $encrypter = new \\Dropbox\\OAuth\\Storage\\Encrypter(\'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\');

    // Instantiate the database data store and connect
    $storage = new \\Dropbox\\OAuth\\Storage\\PDO($encrypter, 1);
    $storage->connect(DB_HOST, DB_NAME, DB_USER, DB_PASSWORD);

    $storage = new \\Dropbox\\OAuth\\Storage\\Session($encrypter);

    $OAuth = new \\Dropbox\\OAuth\\Consumer\\Curl($key, $secret, $storage, $callback);

    $dropbox = new \\Dropbox\\API($OAuth);

    return $dropbox;

}

function export_to_dropbox($id) {
    $dropbox = etd_initialize();

    $post = get_post($id);


    // Create a temporary file and write some data to it
    $tmp = tempnam(\'/tmp\',\'dropbox\');
    file_put_contents($tmp, $post->post_content);

    // Upload the file with an alternative filename
    $put = $dropbox->putFile($tmp, $post->post_title . \'.md\');

    // Unlink the temporary file
    unlink($tmp);
}

register_activation_hook( __FILE__, \'etd_initialize\' );
add_action(\'publish_post\', \'export_to_dropbox\');
?>

2 个回复
SO网友:totels

我不熟悉Dropbox API或它们的库,但很可能您需要编写自己的会话处理程序来将会话数据存储在WP DB中(或安全地存储在您想要的任何地方),并将其与您的用户帐户相关联。基本上符合这一行:$storage = new \\Dropbox\\OAuth\\Storage\\Session($encrypter);.

编辑:

如果这是您试图解决的WordPress方面的问题,那么您需要将OAuth标记保存在usermeta field, 然后,不要执行完整的身份验证流,而是首先检查是否保存了usermeta值,如果有,就使用它。

SO网友:emd

我最终编写了自己的存储类,该类使用WordPress选项表来存储加密的令牌。

结束

相关推荐

Authentication/API Questions

我们正在尝试使用S2Member来管理我们的WP站点和我们正在启动的Flash程序的成员资格。我们希望在用户登录并保持登录状态时使用S2Member对其进行身份验证。问题:Java层需要知道哪个用户登录到Wordpress(如果有的话),以便它可以将正确的数据返回到flash层。建议的解决方案:Wordpress的cookie也应该包含在Flash到Java的请求中。Java可以使用这些cookie来查询Wordpress DB以获取用户ID。我们需要知道的是:1。是否可以从数据库或文件系统获取带有coo