wp_signon不起作用,因为移动到下一页并没有用户登录


wp_signon not working, as moving to next page gives me no user logged in

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

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

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

我想饼干不会保存了。我也试过使用

wp_set_auth_cookie($user->ID,true);

但没有成功。

我不明白当我们使用wp-admin登录时,一个人可以成功登录,或者如果我使用wp_login_form(),那么这也很好。那么使用上面的代码,wats就是问题所在。

请帮忙,因为我无论如何都要让用户在注册后登录。

您的代码是正确的。这两段代码都将成功地对用户进行身份验证和登录。

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

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

wp_redirect($_SERVER['REQUEST_URI']);
exit;

如果您想将用户重定向到特定页面,您可以将$_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;

我通过在以下函数中设置true来修复问题

$user = wp_signon( $creds, true );