Php Wordpress登录部分有效
我尝试在wordpress中登录用户,但它仅适用于在UI中注册的用户,而不适用于程序添加的用户。 登录是对Ajax登录请求的响应:Php Wordpress登录部分有效,php,wordpress,wordpress-rest-api,Php,Wordpress,Wordpress Rest Api,我尝试在wordpress中登录用户,但它仅适用于在UI中注册的用户,而不适用于程序添加的用户。 登录是对Ajax登录请求的响应: //wp_clear_auth_cookie(); $usr = wp_set_current_user ( $user->ID, $user->user_login); wp_set_auth_cookie ( $user->ID ); function register_user($username, $usertype, $externa
//wp_clear_auth_cookie();
$usr = wp_set_current_user ( $user->ID, $user->user_login);
wp_set_auth_cookie ( $user->ID );
function register_user($username, $usertype, $externalid)
{
$user_email = 'theuseremail@mail.com';
$result = wp_insert_user(array('user_login' => $username,
'nice_name' => $username,
'user_email' => $user_email,
'user_pass' => '***********' ));
$fb_user_id = $result;
add_user_meta( $fb_user_id, 'specific_attribute', $specific_id, true );
$user = get_user_by('id', $fb_user_id);
return $user;
}
function load_user($usertype, $specific_id)
{
$user = get_users(array(
'meta_key' => 'specific_attribute',
'meta_value' => $specific_id
));
return $user [0];
}
每个步骤以及任何类型的用户都有日志输出。它在数据库中成功注册,从数据库中加载,甚至登录都可以。甚至会为这两类用户创建一个会话。它可以在数据库中看到。但在所有登录流之后,当页面被重定向或刷新时,只有UI注册的用户进入该站点。在所有成功的步骤之后,程序化的步骤都没有加载:静默不工作,没有错误消息,没有警告,没有失败。看起来需要一些额外的步骤来启用或激活。所有类型的用户都显示在UI的仪表板中
我怀疑以编程方式添加的用户不完整或未激活。这是用户注册为响应Ajax注册请求的方式:
//wp_clear_auth_cookie();
$usr = wp_set_current_user ( $user->ID, $user->user_login);
wp_set_auth_cookie ( $user->ID );
function register_user($username, $usertype, $externalid)
{
$user_email = 'theuseremail@mail.com';
$result = wp_insert_user(array('user_login' => $username,
'nice_name' => $username,
'user_email' => $user_email,
'user_pass' => '***********' ));
$fb_user_id = $result;
add_user_meta( $fb_user_id, 'specific_attribute', $specific_id, true );
$user = get_user_by('id', $fb_user_id);
return $user;
}
function load_user($usertype, $specific_id)
{
$user = get_users(array(
'meta_key' => 'specific_attribute',
'meta_value' => $specific_id
));
return $user [0];
}
这两种用户使用相同的代码,即通过UI注册的用户和通过编程注册的用户。以下是如何从数据库加载用户作为对Ajax登录请求的响应:
//wp_clear_auth_cookie();
$usr = wp_set_current_user ( $user->ID, $user->user_login);
wp_set_auth_cookie ( $user->ID );
function register_user($username, $usertype, $externalid)
{
$user_email = 'theuseremail@mail.com';
$result = wp_insert_user(array('user_login' => $username,
'nice_name' => $username,
'user_email' => $user_email,
'user_pass' => '***********' ));
$fb_user_id = $result;
add_user_meta( $fb_user_id, 'specific_attribute', $specific_id, true );
$user = get_user_by('id', $fb_user_id);
return $user;
}
function load_user($usertype, $specific_id)
{
$user = get_users(array(
'meta_key' => 'specific_attribute',
'meta_value' => $specific_id
));
return $user [0];
}
在这两种情况下,登录都使用元数据字段特定的_属性。对于通过UI注册的用户,此属性将手动添加到数据库中,因为没有此类UI字段。对于其他用户,它会自动添加到函数register\u user中。当我尝试使用标准登录/密码表单登录任何用户时,也会发生同样的情况
工作流更新:1.PHP:
$user=load_user(请求['usertype'],请求['specific_id'])
如果未加载,则注册用户(请求['username']、请求['usertype']、请求['specific\u id'])
//wp_clear_auth_cookie();
$usr=wp\u set\u当前用户($user->ID,$user->user\u login);
wp\u set\u auth\u cookie($user->ID);
执行操作('wp\u login',$user->user\u login);
返回$user// 在这段代码中:
$user = load_user(request['usertype'], request['specific_id'])
if not load then register_user(request['username'], request['usertype'], request['specific_id'])
//wp_clear_auth_cookie();
$usr = wp_set_current_user ( $user->ID, $user->user_login);
wp_set_auth_cookie ( $user->ID );
do_action( 'wp_login', $user->user_login );
return $user; //<-- this is returned to javascript Ajax request
}
在这里,我编写了以编程方式登录和注册WordPress的脚本
已创建用于登录的ajax请求
add_action( 'wp_ajax_gs_user_login_action', 'gspre_user_login');
add_action( 'wp_ajax_nopriv_gs_user_login_action', 'gspre_user_login');
function gspre_user_login(){
$creds = array();
$username = $creds['user_login'] = $_POST['user_login'];
$creds['user_password'] = $_POST['user_pass'];
$userbyname = get_user_by( 'login', $username );
if ($userbyname) {
$user = $userbyname;
}
$userbyemail = get_user_by('email', $username);
if ($userbyemail) {
$user = $userbyemail;
}
if ($user) {
$user_roles = implode(', ', $user->roles);
$user = wp_signon( $creds, true );
if ( is_wp_error($user) ){
$myArr = array(
'response' => 'Invalide username and password',
'redirect_url' => '',
'message' => $user->get_error_message()
);
}else{
wp_set_current_user( $user->ID );
wp_set_auth_cookie( $user->ID );
if ($user_roles == "administrator") {
$redirect_url = home_url('wp-admin/');
}else{
$redirect_url = home_url();
}
$myArr = array(
'response' => 'Login successfully',
'redirect_url' => $redirect_url,
'message' => 'Login successfully'
);
}
}else{
$myArr = array(
'response' => 'Invalide username and password',
'redirect_url' => '',
'message' => $user->get_error_message()
);
}
$myJSON = json_encode($myArr);
echo $myJSON;
die();
}
已创建ajax注册请求
add_action( 'wp_ajax_gs_user_reg_action', 'gspre_user_reg');
add_action( 'wp_ajax_nopriv_gs_user_reg_action', 'gspre_user_reg');
function gspre_user_reg(){
//Create user
//start: Fill you details here
$user_login = $_POST['user_login'];
$user_email = $_POST['email'];
$user_pass = $_POST['password'];
$display_name = $_POST['display_name'];
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$role = 'administrator';
//end: Fill you details here
$flag_1 = 0;
$flag_2 = 0;
$check_username_exists = username_exists( $user_login );
if ($check_username_exists) {
$flag_1 = 1;
}
$check_email_exists = email_exists($user_email);
if ($check_email_exists) {
$flag_2 = 1;
}
if ($flag_1 == 0 && $flag_2 == 0) {
$userdata = array(
'user_login' => $user_login,
'user_pass' => $user_pass,
'user_email' => $user_email,
'display_name'=> $display_name,
'first_name' => $first_name,
'last_name' => $last_name
);
$user_id = wp_insert_user($userdata);
wp_update_user( array ('ID' => $user_id, 'role' => $role) );
if(is_wp_error($user_id)){
//echo $user->get_error_message();
$myArr = array(
'response' => 'register xyz',
'message' => $user->get_error_message()
);
}else{
//echo "User created successfully";
$myArr = array(
'response' => 'register xyz',
'message' => 'User created successfully'
);
}
}else{
//echo "User already exist";
$myArr = array(
'response' => 'register xyz',
'message' => 'User already exist'
);
}
$myJSON = json_encode($myArr);
echo $myJSON;
die();
}
此外,我们还为登录表单创建了一个快捷码
短代码::[gsuserlogin]
add_shortcode('gsuserlogin', 'gsuserlogin_shortcode_function');
function gsuserlogin_shortcode_function(){
if (is_user_logged_in()) {
return 'You have Logged in';
}
?>
<form name="loginform" id="loginform" action="" method="post">
<div class="msg_ajax"></div>
<div>
<label for="gs_user_login"><?php echo _e('Username or Email', 'gs-users'); ?></label>
<input type="text" name="gs_user_login" id="gs_user_login" class="input" value="" size="20">
</div>
<div>
<label for="gs_user_pass"><?php echo _e('Password', 'gs-users'); ?></label>
<input type="password" name="gs_user_pass" id="gs_user_pass" class="input" value="" size="20">
</div>
<div>
<label><input name="gs_user_rememberme" type="checkbox" id="gs_user_rememberme" value="true"> <?php echo _e('Remember Me', 'gs-users'); ?></label>
</div>
<input type="hidden" name="action" value="gs_user_login_action">
<input type="button" id="login_btn" value="Login">
</form>
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery(document).on('click', '#login_btn', function(){
var target = jQuery(this);
var user_login = jQuery('#gs_user_login').val();
var user_pass = jQuery('#gs_user_pass').val();
//Ajax
jQuery.ajax({
url: '<?php echo admin_url( 'admin-ajax.php');?>',
type: "POST",
data: {'action': 'gs_user_login_action', user_login: user_login, user_pass: user_pass},
cache: false,
dataType: 'json',
beforeSend: function(){
},
complete: function(){
},
success: function (response) { console.log(response);
jQuery('.msg_ajax').text(response['message']);
console.log(response['redirect_url']);
console.log(response['message']);
if (response['redirect_url']!="") {
window.location.href = response['redirect_url'];
}
}
});
//Ajax
});
});
</script>
<?php
}
add_shortcode('gsuserlogin','gsuserlogin_shortcode_function');
函数gsuserlogin\u短代码\u函数(){
如果(用户是否已登录){
返回“您已登录”;
}
?>
jQuery(文档).ready(函数(){
jQuery(document).on('click','#login_btn',function(){
var target=jQuery(this);
var user_login=jQuery('#gs_user_login').val();
var user_pass=jQuery('#gs_user_pass').val();
//阿贾克斯
jQuery.ajax({
url:“”,
类型:“POST”,
数据:{'action':'gs_user_login_action',user_login:user_login,user_pass:user_pass},
cache:false,
数据类型:“json”,
beforeSend:function(){
},
完成:函数(){
},
成功:函数(响应){console.log(响应);
jQuery('.msg_ajax').text(响应['message']);
log(响应['redirect_url']);
日志(响应['message']);
如果(响应['redirect_url']!=“”){
window.location.href=response['redirect_url'];
}
}
});
//阿贾克斯
});
});
jQuery(文档).ready(函数(){
jQuery(document).on('click','#btn_reg',function(){
var target=jQuery(this);
var first_name=jQuery('#first_name').val();
var last_name=jQuery('#last_name').val();
var user_login=jQuery('#user_login').val();
var email=jQuery('#email').val();
var password=jQuery('#password').val();
//阿贾克斯
jQuery.ajax({
url:“”,
类型:“POST”,
数据:{'action':'gs_user_reg_action',first_name:first_name,last_name:last_name,user_login:user_login,email:email,password:password},
cache:false,
数据类型:“json”,
beforeSend:function(){
},
完成:函数(){
},
成功:函数(响应){console.log(响应);
jQuery('.msg_ajax').text(响应['message']);
log(response['response']);
日志(响应['message']);
}
});
//阿贾克斯
});
});
那么,哪一部分不起作用了?第一部分?你启用了其他插件吗?密码应该是user\u pass
同样在wp\u insert\u user
@HowardE中有一个干净的Wordpress。除了我开发的插件外,没有安装任何插件。关于哪个部分不起作用,很奇怪,但一切都在工作。只是每件事。我为每个步骤写详细的日志。用户已注册、加载,没有问题。在所有工作流成功并完成后,它将失败。我执行重定向,但用户未加载。@Howar