允许访问者通过外部脚本访问受密码保护的页面/帖子

时间:2013-07-01 作者:luke

Overview:
在我的网站上,我想做一个客户区。有一个表单,访问者可以在其中输入名称(例如“event\\u xyz”)和密码。只有一些消息灵通的圈子(想要下载一些文件的xyz活动参与者)才会知道访问数据。通过提交,访问者被重定向到pp重定向。php应该设置cookie来访问访问者想要访问的特定站点-$\\u POST[\'name\']等于POST的slug。

我找到了这个脚本来设置cookie,并试图像这样解决我的问题:

global $wp_hasher;
if ( empty( $wp_hasher ) ) {
    require_once( ABSPATH . \'wp-includes/class-phpass.php\' );
    $wp_hasher = new PasswordHash(8, true);
}

setcookie( \'wp-postpass_\' . COOKIEHASH, $wp_hasher->HashPassword( stripslashes( $_POST[\'pw\'] ) ), 0, COOKIEPATH );

wp_safe_redirect( "http://www.domain.com/wordpress/".$_POST[\'name\'] );
exit();
但这向我显示了此文件和wp includes/pluggable中的错误。php已发送邮件头。我也不知道脚本是如何从wp登录中获取的。php?action=postpass,知道我要访问哪个站点。有什么解决方案吗?

2 个回复
最合适的回答,由SO网友:luke 整理而成

最后,我找到了解决方案:

表格。php

<form action="<?php echo bloginfo(\'template_directory\'); ?>/pp-redirect.php" method="post">
Event: <input name="event" type="text" size="25" /><br />
Passwort: <input name="post_password" type="password" size="25" /><br />
<input name="submit" type="submit" value="Los" />
</form>
pp重定向。php

<?php
/** Make sure that the WordPress bootstrap has run before continuing. */
require( dirname(__FILE__) . \'./../../../wp-load.php\');
global $wp_hasher;
if ( empty( $wp_hasher ) ) {
    require_once( ABSPATH . \'wp-includes/class-phpass.php\' );
    $wp_hasher = new PasswordHash(8, true);
}
if ( get_magic_quotes_gpc() )
    $_POST[\'post_password\'] = stripslashes($_POST[\'post_password\']);

// Expires when the browser shuts down
setcookie( \'wp-postpass_\' . COOKIEHASH, $wp_hasher->HashPassword( stripslashes( $_POST[\'post_password\'] ) ), 0, COOKIEPATH );

wp_safe_redirect( get_bloginfo(\'url\') . "/" . $_POST[\'event\'] );
?>
欢迎!

SO网友:s_ha_dum

您需要挂接该代码,以便在将任何数据发送到浏览器之前运行该代码。

function remote_login_wpse_104911() {
  global $wp_hasher;
  if ( empty( $wp_hasher ) ) {
    require_once( ABSPATH . \'wp-includes/class-phpass.php\' );
    $wp_hasher = new PasswordHash(8, true);
  }

  setcookie( \'wp-postpass_\' . COOKIEHASH, $wp_hasher->HashPassword( stripslashes( $_POST[\'pw\'] ) ), 0, COOKIEPATH );

  wp_safe_redirect( "http://www.domain.com/wordpress/".$_POST[\'name\'] );
}
add_action(\'template_include\',\'remote_login_wpse_104911\');
这完全没有经过测试。如果我想,我没有测试它所需的所有信息。:)几乎可以肯定,要在新的环境中工作,您必须对其进行修改。但这就是想法。

结束

相关推荐

unit testing admin password

我正在为我的插件编写单元测试,我需要一个登录的用户来测试,但我在任何地方都找不到管理员密码。有人知道默认的管理员密码是什么吗?我正在扩展WP_UnitTestCase 并从https://unit-tests.svn.wordpress.org/trunk.我目前的代码:<?php require_once(\'myPlugin.php\'); class MyPluginTest extends WP_UnitTestCase{ function