wp_signon无法正常工作,因为移动到下一页时没有用户登录

mah*_*esh 0 php wordpress

在我的wordpress项目中,我创建了用户可以注册的模板页面.现在我面临的问题是让用户在注册后登录.我创建了一个用户,之后我尝试使用下面的代码让用户登录.

$creds = array();
$creds['user_login'] = $username;
$creds['user_password'] = $password;
$creds['remember'] = true;
$user = wp_signon( $creds, false );
Run Code Online (Sandbox Code Playgroud)

我还创建了一个登录模板,允许用户使用相同的上述代码进入,但会出现同样的问题.现在我面临的问题是,一旦我移动到新页面,我发现用户没有登录.

我猜饼干没有得到保存.我也试过用

wp_set_auth_cookie($user->ID,true);
Run Code Online (Sandbox Code Playgroud)

但没有成功.

我无法理解当我们使用wp-admin登录然后可以成功登录或者如果我使用wp_login_form()那么这也可以正常工作.然后通过使用上面的代码来解决问题.

请帮助,因为我必须让用户登录后登录.

Roh*_*yas 6

我通过在以下函数中设置为 true 来解决问题

$user = wp_signon( $creds, true );


Mar*_*sov 5

你的代码是正确的.这两段代码都将进行身份验证并成功登录用户.

但是你错过了重定向.在调用wp_signon()或wp_set_auth_cookie()之后,您应该重定向用户以确保正在加载新cookie.

这可以通过在wp_signon()或wp_set_auth_cookie()调用之后立即使用以下代码来完成:

wp_redirect($_SERVER['REQUEST_URI']);
exit;
Run Code Online (Sandbox Code Playgroud)

如果要将用户重定向到特定页面,可以$_SERVER['REQUEST_URI']使用要将用户重定向到的URL 替换.

旁注:您应该确保在发送标头之前调用此代码,因为在发送标头后wp_redirect()将不起作用.

编辑:如果以上操作不起作用,您可以尝试整个登录过程($user应该是用户对象,您可以使用该get_user_by()函数获得):

do_action('wp_login', $user->user_login, $user);
wp_set_current_user( $user->ID );
wp_set_auth_cookie( $user->ID );
$redirect_to = $_SERVER['REQUEST_URI'];
wp_safe_redirect($redirect_to);
exit;
Run Code Online (Sandbox Code Playgroud)