引子: 我们在做一个需要前端登录项目时,为了省事,直接在登录页模板顶部写入了登录逻辑,默认使用了wp_signon登录函数来实现登录,登录后前台使用没有问题,不过在用户进入后台时自动退出了登录状态;
如下是wp_signon函数上的说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
* Authenticates and logs a user in with 'remember' capability. * * The credentials is an array that has 'user_login', 'user_password', and * 'remember' indices. If the credentials is not given, then the log in form * will be assumed and used if set. * * The various authentication cookies will be set by this function and will be * set for a longer period depending on if the 'remember' credential is set to * true. --------------------------------------------------------- * Note: wp_signon() doesn't handle setting the current user. This means that if the * function is called before the {@see 'init'} hook is fired, is_user_logged_in() will * evaluate as false until that point. If is_user_logged_in() is needed in conjunction * with wp_signon(), wp_set_current_user() should be called explicitly. --------------------------------------------------------- |
横线的区域为我们此次解决问题的重点,当我们在init 钩子之前调用时,is_user_loggen_in函数将返回假,刚好我们在处理登录代码的时候直接die掉了,发现问题出现在这里,思路就出来了,根据提示我们使用了wp_set_current_user函数来解决:
代码如下:
1 2 3 4 5 6 7 8 9 10 |
$user = get_user_by( 'login', $user_name ); if ( $user && wp_check_password( $pass, $user->user_pass, $user->ID) ){ wp_set_current_user( $user->ID, $user->user_login ); wp_set_auth_cookie( $user->ID ); do_action( 'wp_login', $user->user_login ); echo "<script>alert('Welcome back!');window.location.replace('".home_url('/usercenter.html')."');</script>"; die(); }else{ $error = "<script>alert('Non valid phone number, please reinput!');</script>"; } |
我们建议在做项目时使用其他的方式来实现前台登录,避免发生类似问题。
rimini主题也遇到这个问题,我们在帮XX客户开发前端投稿功能时在前台用到了媒体库,上传文件时自动退出登录,也是由于登录方法使用不正确导致的!被耽搁了1个小时来找问题,最终确定是这个问题。
博客写的很好,居然一个评论都没有,太可惜了。
你是沙发