如何在不登录用户的情况下检查用户名/密码

时间:2012-08-09 作者:emersonthis

我正在编写一个插件,创建一个验证用户名/密码对的API端点。

我当前正在使用wp_signon() 检查用户名/密码组合是否有效。当凭据失败时,这可以正常工作,因为它返回一个错误对象。但当凭据良好时,它会自动登录该用户,因此我的端点会返回整个页面。

The codex 目前甚至没有提到它自动登录用户的事实。它似乎也不接受参数来抑制该功能。就我的目的而言,简单的布尔型就可以了。

UPDATE:我不得不选择一个答案,但这里有很多有用的信息,还有其他几个答案,我将在这里简要总结一下。。。

有一个函数正是我想做的:wp_authenticate($username, $password) 然而,它有一个缺点。它会自动设置登录cookie,在我这样的情况下可能会产生问题。所以要小心。该功能目前不在法典中。

我做这件事的最佳选择是wp_authenticate_username_password($user, $username, $password) 因为它没有设置登录cookies。这个函数有更多的文档记录,但真正重要的细节是您可以传递NULL 作为第一个参数。这意味着您可以有效地使用它wp_authenticate() 不用担心饼干会弄糟。阅读文档,以免被回答弄糊涂。它返回WP\\u用户对象或WP\\u错误(不是布尔值!)。

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

中有一个函数user.php 名为wp_authenticate_username_password 这似乎就是你要找的。

如果你想避免$user 对象(您可能只有用户名+密码),然后抛出null 作为中的第一个函数参数:

$check = wp_authenticate_username_password( NULL, \'some_username\', \'#thepassw0rd\' );
然后,您只需使用is_wp_error( $check ).

SO网友:kaiser

免责声明:这个答案应该只显示幕后发生的事情,而不是作为如何做事的真实例子

回溯wp_signon() 呼叫wp_set_auth_cookie(), 然后调用wp_generate_auth_cookie(). 结果将在内部使用setcookie() 作为2个参数。

(非性能)过滤器的乐趣也可以用错误的方式欺骗WordPress

然后你就可以跳进\'auth_cookie\'-内部过滤器wp_generate_auth_cookie() 只需将其设置为null或SECURE_AUTH_COOKIEAUTH_COOKIE 价值这将给您留下一个无意义的cookie,无法登录。

SO网友:Adam

使用

说明

// get user by login via the supplied username (form input)
$user = get_user_by(\'login\', $username);

//assign user ID based on user login name
$user_id = $user->ID;

// get user data by passing the assigned $user_id variable to get_userdata
// which returns the user object and a host of user related info to access
$user_data = get_userdata($user_id);


// assign the username and password to variables
$user_login = $user_data->user_login;
$user_pass = $user_data->user_pass;

// check the username/password against the submitted input values
if ($user_login = $username && $user_pass = $password) {

// do something...
注释$username 默认情况下应验证true,否则如果$username 提供的与数据库中已有的不匹配。因此,验证取决于$password 存储用户提供的表单输入的变量。

通过缩短现有代码或使用其他API函数,可能有更有效的方法来实现这一点。

根据fdsa 你可以反过来使用wp_authenticate_username_password 以这种方式,

$auth = wp_authenticate_username_password($user, $username, $password);

if (!$auth->user_login = $username && !$auth->user_pass = $password) {

echo \'not authenticated\';

} else {

echo \'authenticated\';

}
但比这更好的是,

$auth = wp_authenticate_username_password($user, $username, $password);

if (is_wp_error($auth)) {

echo \'not authenticated\';

} else {

echo \'authenticated\';

}
真的,这个答案应该是肯定的fdsa 最有效的方法是通过(遗憾的是)未记录的WP核心函数。

http://wpseek.com/wp_authenticate_username_password/

SO网友:emersonthis

“Ta da”:wp_authenticate($username, $password)

It\'s not in the codex at all, but you can look it up on wpseek.

它做的正是它听起来的样子。接受用户名和纯文本密码,并返回WP_User 对象或aWP_Error... 它不会让任何人登录。

请注意!以下内容将始终返回true(因为函数以任意方式返回对象):

$auth = ( wp_authenticate($username, $password) ) ? TRUE : FALSE;
您可能希望执行以下操作:

$test_creds = wp_authenticate($username, $pass) ;
$class = get_class($test_creds);
$auth = ( $class == \'WP_User\' ) ? TRUE : FALSE ;
我希望这对某人有所帮助。

结束

相关推荐

Authentication/API Questions

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