WordPress 实现用户自动登录的方法

2017-12-23 22:04 2,078 16 条评论 龙笑天下
导语: 本文主要介绍 WordPress 实现用户自动登录的方法,wp_signon()和 wp_set_auth_cookie()函数,以及解决一个启用 https 后出现的进不了 wordpress 后台的问题~
Dragon主题购买

所有带前端用户注册功能的 wordpress 主题中都会遇到这样一个使用场景:用户填写用户名及密码等信息注册成功后,都希望同时能自动登录。

WordPress 实现用户自动登录的方法

那么,怎么实现这个自动登录呢?本文为你分享 2 个自动登录的方法,大家可以自由使用。

方法一:利用wp_signon()函数来实现

介绍下该函数先~

函数描述:

根据给定的凭证来验证用户身份。

用法:

<?php wp_signon( $credentials, $secure_cookie ); ?>

参数:

$credentials

(数组)(选填)用户的登录信息。注意:如果不填写该项的话,该函数会默认使用$_POST 变量的值(键名为"log", "pwd" 和 "rememberme");

默认值:无

$secure_cookie

(布尔)(选填)是否使用安全 cookie。

默认值:无

返回值:

(对象)成功的话返回WP_User,失败的话返回WP_Error

举例:

将以下代码应用到你的 WordPress 中即可实现自动登录功能:

if (!is_user_logged_in()) {
	$creds = array();
	$creds['user_login'] = 'example'; // 用户名是 example,自行修改
	$creds['user_password'] = 'plaintextpw'; // 密码是 plaintextpw
	$creds['remember'] = true;
	$user = wp_signon( $creds );
	if ( is_wp_error($user) )
		echo $user->get_error_message();
}

方法二:无需密码的方式

通过上面的介绍我们可以看出 wp_signon()函数是需要知道用户的用户名及密码的;而现在有种更好的实现方法,不需要知道帐号密码,只需指定用户名即可,实现代码如下:

if (!is_user_logged_in()) {
	$user_login = 'example'; // 用户名是 example,自行修改

	// 获取用户 id
	$user = get_userdatabylogin($user_login);
	$user_id = $user->ID;

	// 登录
	wp_set_current_user($user_id, $user_login);
	wp_set_auth_cookie($user_id,true);
	do_action('wp_login', $user_login);
}

在这里用到了这个函数:wp_set_auth_cookie(),这个函数的用法跟 wp_signon()函数类似:wp_set_auth_cookie( $user_id, $remember, $secure ),第一个参数是用户 ID,第二个是是否记住用户,第三个是是否启用安全 cookie~

特别说明

1. 如果将方法一或方法二的代码示例,直接放到主题的 functions.php 中,那么只要打开前台任何页面,就会自动登录到你设置的用户名example下。本文只是提供自动登录的方法,至于怎么使用用就得看你具体的需求了。

2. 请注意 wp_signon() 函数里的$secure_cookie参数和 wp_set_auth_cookie() 函数里面的$secure参数:请把这 2 个参数留空,不要设置值!龙笑天下在启用 SSL 的时候,就因为设置该参数为false,导致出现了一个奇怪“无解”(找遍了网络都没找到真正的解决方法... 都在说什么 cookie 的路径问题....)的现象,现将该现象描述如下以供遇到同样问题的你来参考:

a. 通过主题前台的弹出框输入用户名及密码方式来登录的话,前台能正常登录,前台页面能正常浏览,一切“如常”;让人崩溃的问题就来了:一旦你打开后台页面,你会被重定向强制退出登录,就是进不了 wordpress 的后台...
b. 通过 wordpress 的后台默认登录页面(wp-login.php)或者通过社交按钮来登录的话,则能够自由出入前后台~

通过搜索,使用了网上的几乎所有方法,都无果... 只能确认是 cookie 的问题~

后来通过比较 a 和 b 两种情形的 cookie 发现了问题所在,唯一区别就是:a 情形里 cookie 名是:wordpress_396e26512564256ed830cb7909cc751e,b 情形里 cookie 名是:wordpress_sec_396e26512564256ed830cb7909cc751e。大家应该发现问题了吧,cookie 名里多与少了一个sec的区别。

最后通过定位主题的登录函数,发现了是这个函数的问题:wp_signon()

该函数如果第 2 个参数如果留空不设置值话,它就会自动判断站点是否启用了 https,从而自动判断是否使用安全 cookie。而我的主题里却把第 2 个参数值定死为 false 了......

最最后,友情提示主题制作者,一定要注意下这些个小细节啊~ PS:当时启用 https 后,因为这个问题,简直想屎的心都有了~~~~~~~~~

更多关于 tinection 主题的 bug 及修复方法详见下文:

知言 Tinection 主题中的小 Bug 及修复方法(更新到 7 个 Bug)-BG
知言 Tinection 主题中的小 Bug 及修复方法(更新到 7 个 Bug)

知言 Tinection 主题中的小 Bug 及修复方法(更新到 7 个 Bug)

这篇文章主要介绍知言的 tinection 主题的一些小 bug 以及相应的解决方法。当然,这些问题在 Dragon 主题中已经都解决了,欢迎大家前往购买体验~ Bug 1:分页导航的问题 5 月 17 日,...

关于禁止用户登录、禁止多人同时登录一个账户的方法可参见下面 2 篇文章:

WordPress 禁止某些用户登录-BG
WordPress 禁止某些用户登录

WordPress 禁止某些用户登录

在某些特殊情况下,比如某些用户损害了网站的利益,你可能就需要禁止他们登录网站。 要实现这样的功能,可以直接下载安装 Disable Users 或者 BAN Users 插件。当然,本文介绍...
Wordpress 禁止多个人登录同一用户帐号-BG
Wordpress 禁止多个人登录同一用户帐号

Wordpress 禁止多个人登录同一用户帐号

许多 Wordpress 都是开放注册的,又有不少的站点是在做交易站点,可以进行购买实物在线交易的,在线交易的站点往往是禁止同一个帐号多人使用的,而在 Wordpress 中是没有限制的,也...

相关参考

wp_signon() 位于文件 wp-includes/user.php;
wp_set_auth_cookie() 位于文件 wp-includes/pluggable.php。
Function Reference/wp signon « WordPress Codex
Function Reference/wp set auth cookie « WordPress Codex
WordPress 实现用户自动登录 - ludou

「点点赞赏,手留余香」

还没有人赞赏,快来当第一个赞赏的人吧!

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

2017-10-22

2017-12-26

发表评论

表情 格式 贴图 链接 私密 签到
Dragon主题购买阿里云特价云服务器1核2G低至86元,N4共享型服务器3年仅需799元腾讯云特价云服务器1核2G 88元/年 2核4G3M688元/3年,更有千元代金券礼包免费领!
评论
正在努力加载中...
扫一扫二维码分享
×
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept”, you consent to the use of ALL the cookies. Learn more