WordPress版本4.7.5使用wp_set_auth_cookie有任何挂钩
我从Instagram的注册新用户,我能成功注册新用户。注册后,我正在尝试登录用户。
我可以使用钩子,但想比较好的解决方案,我 已张贴,因为这将是完全无用的。
if($user_created) {
$new_user = get_user_by('id', $user_created);
//$loggedin = programmatic_login($new_user->user_login);
//ob_start();
if (!is_user_logged_in()) {
wp_clear_auth_cookie();
wp_set_current_user($user_created, $new_user->user_login);
wp_set_auth_cookie($user_created, true);
do_action('wp_login', $new_user->user_login);
// wp_safe_redirect(site_url() . '/profile/');
// exit;
// $redirect_to=user_admin_url();
// wp_safe_redirect($redirect_to);
// exit();
}
//ob_end_clean();
} ?>
<script>jQuery(document).ready(function(){ window.location.href = "<?php echo site_url() . '/profile/'; ?>";});</script> <?php
也试图从另一篇文章的自定义programmatic_login功能。
,如果我试图var_dump
wp_get_current_user()
和$_COOKIE
低于此,我获取用户对象wp_get_current_user()
和array(1) { ["wordpress_test_cookie"]=> string(15) "WP Cookie check" }
为$_COOKIE
。
重要编辑
的代码是一个函数,它挂到钩子,即在一侧称为一个网页,是越来越显示头之后里面,所以我们不能在这里使用的init。任何其他的做法,也是因为这个wp_safe_redirect()
或header('Location: ')
也无法正常工作。
重要更新与我刚才想
一个肮脏的工作,各地
当我创建从Instagram的注册用户,成功创建后,我重定向用户到一个页面与GET参数像?user_id=$inserted_id
和WP挂钩,我试图得到GET['user_id']
并记录它,它的工作,试图找到一个合适的解决方案。
if ($wpdb->insert_id){ //that is registration with instagram
?>
<script>jQuery(document).ready(function(){ window.location.href = "<?php echo get_bloginfo('url') . '/profile/?id=' . $wpdb->insert_id; ?>";});</script>
<?php
}
然后
add_action('wp', 'login_current_user');
function login_current_user(){
if (is_page() && get_the_id() == 863){
if (isset($_GET['id'])){
if (!is_user_logged_in()) {
$user_id = $_GET['id'];
$user = get_user_by('id', $user_id);
wp_clear_auth_cookie();
wp_set_current_user($user_id, $user->user_login);
wp_set_auth_cookie($user_id, true);
do_action('wp_login', $user->user_login);
if (is_user_logged_in()){
$redirect_to=site_url() . '/profile';
wp_safe_redirect($redirect_to);
exit();
}
}
}
}
}
与使坏Proble。如果我们传递的
id
作为获取参数 存在于wp_users表中,那么将不会验证将会记录在 中。
更新
我创建了一个user_meta重定向到的个人资料页验证登录用户之前和之后,除去usermeta,就像一个OTP。尽可能让它变得更好。
代码如下: -
if ($wpdb->insert_id){ //that is registration with instagram
$temporary_token = sha1(rand());
update_user_meta($wpdb->insert_id, 'temporary_token', $temporary_token);
?>
<script>jQuery(document).ready(function(){ window.location.href = "<?php echo get_bloginfo('url') . '/profile/?id=' . $wpdb->insert_id . '&token=' . $temporary_token; ?>";});</script>
<?php
}
然后
add_action('wp', 'login_current_user');
function login_current_user(){
if (is_page() && get_the_id() == 863){
if (isset($_GET['id'])){
if (!is_user_logged_in()) {
$user_id = $_GET['id'];
$user = get_user_by('id', $user_id);
if ($_GET['token'] == get_user_meta($user_id, 'temporary_token', true)){
delete_user_meta($user_id, 'temporary_token', $_GET['token']);
wp_clear_auth_cookie();
wp_set_current_user($user_id, $user->user_login);
wp_set_auth_cookie($user_id, true);
do_action('wp_login', $user->user_login);
if (is_user_logged_in()){
$redirect_to=site_url() . '/profile';
wp_safe_redirect($redirect_to);
exit();
}
}
}
}
}
}
如果头文件在'wp_set_auth_cookie()'之前发送,那么cookie可能不会被设置。如果你可以挂钩init动作add_action('init','my_action');'并且在那里打电话,它可能会解决这个问题。 – Brian