WP_SignOn()不验证所需的用户指南

时间:2013-09-24 作者:LoomyBear

我使用表单向页面发送POST请求,并使用wp_signon() 如WP文档所述,为了验证用户对我的wordpress安装的身份:

$creds = array();
$creds[\'user_login\'] = $_POST["user-login"];
$creds[\'user_password\'] = $_POST["user-password"];
$creds[\'remember\'] = true;

$user = wp_signon( $creds, false );
在这段代码之后,我正在检查用户是否已登录:

if ( is_user_logged_in() ) { echo "SUCCESS"; } else { echo "FAIL!"; }
但我有FAIL! 总是在四处嗅探之后,我发现了这个小把戏:

wp_set_current_user( $user );
if ( is_user_logged_in() ) { echo "SUCCESS"; } else { echo "FAIL!"; }
我有SUCCESS 但当我离开这一页时FAIL 一次又一次。

谁能告诉我如何使用wp_signon() 在页面更改或重新加载或其他任何情况下,都不会让她注销。

当我去/wp_admin 并使用WP的默认登录表单登录。我可以浏览我的WP站点的每个页面,始终保持登录状态。但当我尝试在默认表单之外执行此操作时FAIL.

指引我!请

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

最后,在将-替换为\\uFrom输入属性名称并使用完整的php开始标记后,这对我的本地WP安装是有效的<?php 而不是<? 最后的代码在这里复制并粘贴到模板中。

<?php if ( isset($_POST["user_email"]) && isset($_POST["user_password"]) ) {

$user_login     = esc_attr($_POST["user_email"]);
$user_password  = esc_attr($_POST["user_password"]);
$user_email     = esc_attr($_POST["user_email"]);

$user_data = array(
    \'user_login\'    =>      $user_login,
    \'user_pass\'     =>      $user_password,
    \'user_email\'    =>      $user_email,
    \'role\'          =>      \'student\'
);

// Inserting new user to the db
//wp_insert_user( $user_data );

$creds = array();
$creds[\'user_login\'] = $user_login;
$creds[\'user_password\'] = $user_password;
$creds[\'remember\'] = true;

$user = wp_signon( $creds, false );

$userID = $user->ID;

wp_set_current_user( $userID, $user_login );
wp_set_auth_cookie( $userID, true, false );
do_action( \'wp_login\', $user_login );

}

if ( is_user_logged_in() ) : echo \'SUCCESS\'; ?>
<h1>Html for logged in user </h1>
<?php else : echo \'FAIL!\'; ?>
<form id="user-credentials" method="post" action="<?php the_permalink(); ?>">
    <p><input name="user_email" type="text" placeholder="Email" /></p>
    <p><input name="user_password" type="password" placeholder="Password" /></p>
    <p><input type="submit" class="button blue size-s" value="Submit" /></p>
</form>
<?php endif; ?>

SO网友:pingle60

如果您的密码包含#和/或@字符,则需要在表单中发送之前进行URL编码,然后在wp\\U signon中设置凭据之前进行URL解码。

@的url编码是%40,#是%23和!是%21

如果你的密码是我的!p@ssWord#然后应该在发布到我的%21p%40ssWord%23之前进行URL编码,然后在设置wp\\u登录凭据之前进行URL解码

结束

相关推荐

如何重命名运行在IIS6上的WordPress wp-login.php?

我的Windows 2003 VPS最近挂起,因为机器人程序连续几个小时不停地敲打我的WordPress登录php(根据IIS6日志确定)。这导致MySQL耗尽了所有分配的1G RAM。重置VM后,我迅速重命名了wp登录名。php来防止我的服务器再次崩溃。按照重命名新安装的web应用程序的管理员用户名和管理员登录文件夹/路径的标准做法,在6月份第一次安装WP之后,我尝试重命名WP admin文件夹,但失败了。我向wp admin添加了Windows身份验证,希望这将有助于提高安全性,但事实证明,这并不能阻