提问者:小点点

wordpress管理ajax buddypress身份验证


要求:Wordpress/Buddypress编程身份验证

我已经通过外部API创建了Wordpress用户注册流程。这将有效地检查电子邮件是否已注册,如果未注册,则使用

$random_password = wp_generate_password( $length,$include_standard_special_chars);
$user_id = wp_create_user( $user_name, $random_password, $user_email );

也使用

$meta_key = 'authorities';
$meta_value = $authorites;
add_user_meta( $user_id, $meta_key, $meta_value, true );

角色。注册过程中调用使用add_action('init',MyAuthFunction);只有当一个有效的用户没有找到。

问题是BuddyPress心跳admin-ajax.php进程返回

{“wp auth check”:false,“服务器时间”:1521498709}

每当尝试新的活动评论或论坛帖子时。这反过来会产生(单击“发布”时)

你确定要这样做吗?

作为对AdminAjax的响应。php

因此,我们无法在活动或论坛中发布新项目。奇怪的是论坛和活动部分知道哪个用户登录了。。。(即显示登录名)

我假设这是buddypress中的某种形式的二级用户注册,但似乎找不到它。到目前为止,我已经看到了对钩子的评论:

  • bp_core_signup_user()
  • bp_注册_验证()

因此:问题-当通过代码而不是注册表创建新的WP用户时,Buddypress是否需要第二种形式的身份验证或标志。

到目前为止,我正在调查:Buddypress额外的用户需求数据(如上面的函数所示)通过管理员重新测试新用户注册以复制问题。(到目前为止,在Buddypress插件之前添加的原始用户(或管理员)没有遇到此问题)

更新:尝试从“r-a-y”响应中使用此选项(页面的一半)https://buddypress.org/support/topic/how-to-hook-into-add-new-member-in-buddypress-unresolved/

您可以通过添加“last_activity”用户元条目以编程方式绕过此问题。

不幸的是,这是不正确的,因为有问题的用户在用户元中已经有上一个活动的记录。

更新2:停用认证插件,以管理员身份登录,更改用户密码,以管理员身份注销,以代码创建的用户身份通过 /admin/(wp-admin)登录,在 /activity/.发表评论这个顺序正确地允许我在活动部分发表评论。因此,以编程方式创建的用户是OK的,问题似乎是在'登录'过程中的某个地方触发好友按下与用户愉快...

更新3:隔离问题似乎是在管理ajax的方式之内。php获取$current_user(Wp_user)值。如果一个成员通过/admin/login表单登录,那么会设置一个神奇的值,允许管理员使用ajax。php来提取当前用户。如果用户身份验证cookie是通过

wp_clear_auth_cookie();
wp_set_current_user ( $user_id );
wp_set_auth_cookie  ( $user_id );

然后管理员ajax似乎无法获得$current_user因此is_user_logged_in失败()

因此,重新定义了问题管理ajax。php和当前用户的提取(在页面加载时登录,但不是通过admin ajax.php)


共1个答案

匿名用户

最后一个问题是在某种情况下调用了wp_logout(),从而删除了

  • wordpress已登录xxxxx
  • wordpress_sec_uuxxxxx

cookies,这是导致is_logged_in_user()返回空实例的原因。

所有人注意:当通过外部API登录Wordpress时,确保您的Cookie设置正确(http和https以及域)

注意:这根本不是一个好友新闻问题