• 欢迎访问乐趣公园网站,WordPress信息,WordPress教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入乐趣公园 QQ群
  • Git主题现已支持PHP7版本,速度应该会提高不少,不过云落的网站本来就很快了,所以感觉不是太明显
  • 最新版Git主题已支持说说碎语功能,可像添加文章一样直接添加说说,新建说说页面即可,最后重新保存固定连接,演示地址
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏乐趣公园吧
  • 云落的淘宝店铺已经开张了哦,传送门:https://kimipet.taobao.com

思考如何在WordPress里面对访客进行提权

WordPress 云落 5个月前 (05-07) 54次浏览 已收录 8个评论
文章目录[隐藏]

通过很简单的一组代码,我们可以实现对游客的权限进行提升

思考如何在 WordPress 里面对访客进行提权

前言

作为网站的站长,我们都希望我们的访客都是已登录用户,这样的话有很多功能都可以实现,但是实际上很多访客都是以游客的身份,就是没有登录状态来登录的,这样的话可能有些功能却没法实现。换个思路,我们可以将未登陆的访客变成已登陆的访客。

遇到的需求

大家都知道云落,最近在做一个浏览器插件的网站。插件就跟软件一样,都是需要更新的,但是对于如何更新插件信息,却是思考了很长时间。因为有的插件很长时间都不需要更新,而有的插件更新的频率就要高一点。如何应对这些插件的更新?我们需要好好的思考一下,毕竟如果所有的插件都定时更新的话,对网站的性能有很大的影响。
关于如何更新云落是这样想的,对于那些使用比较多的,访问用户访问比较多的下载比较频繁的插件,我们可以进行检测更新,对于那些基本没有用户访问,基本没人下载的插件,我们可以不去考虑更新。当然了,这里的更新是指检测更新,而不是实际更新,检测到有更新的时候,当然要更新一下,如果检测到没有更新的肯定是不需要更新的。因为检测更新需要直接连接到谷歌插件商店网站,这样的话对我们的性能肯定有影响,因为这么多插件,如果每个都要检测的话这个非常的消耗网站性能呢。

解决办法

对于如何更新,这里我想到了一个另外一种方法,就是使用用户的访问来进行更新。就是当用户访问这个插件页面的时候,我们才去检测一下更新,如果用户不去访问那个插件的话,我们就不去检测更新,这样的话,热门的插件就能进行保持一个活跃的更新,那些不热门的就可以不去考虑更新。
由于网站的插件的信息都是保存在自定义栏目里面,所以只需要在用户访问的时候,对这些进入自定义栏目进行删除,然后进行一个更新就可以了。然后网站就会重新检查谷歌插件商店,并对插件的信息进行重新采集并更新。

发现的问题

根据上面实现的方案,进行了实际的部署,但是后来发现几个问题,第一个就是网站的文章页面也就是插件主页基本都是被缓存的,而这里的 php 代码是没法运行的
的,所以必须要换个地方。而且考虑到访问插件文章可能并不是想要下载插件的,有可能也只是闲逛的,所以对于访问文章页面并进行检测插件更新这个思考有点欠妥。思考了一下,决定将访问的机制放在下载页面,因为如果要下载插件的话肯定要访问下载单页的。
如果说第一个问题,好好几句话,那么第二个问题就不太好解决了。我原本的想法是,访问下载单机的时候删除旧的自定义栏目,并且更新新的自定义栏目,这个时候我们就需要更新文章的权限。但是在实际的时候,我发现并没有更新成功文章。检查了一下,发现问题在游客并没有权限来更新文章。当然,这个也是很自然的,游客并没有登录网站,怎么可能来更新网站的数据库?这一点也是为了安全考虑,但是在这里却是一个非常大的障碍,因为我无法利用用户的访问来自动检测更新插件的信息。

解决思路

明白了问题的所在,所以就要解决问题,解决这个问题的思路就是如何将优酷的权限提升,也就是说游客能够使用更新文章这个权限。为了解决这个问题,我在 wordpress 的源码里面准备修改,但是在这个方面 wordpress 是非常复杂的,所以没有修改成功。在我在网上闲逛的时候,突然发现有一篇文章,这篇文章主要讲的就是一个自动登录的问题,虽然文章中并没有说明这个功能来具体的应用,但是我突然发现,这个功能貌似可以解决我的问题。看了一下,待会儿我发现其实非常简单,就是使用了 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, false );
  if ( is_wp_error($user) )
    echo $user->get_error_message();
}

代码来自:https://www.ludou.org/wordpress-auto-login.html

2018/5/16 更新

最近发现有一个问题,就是访客评论都是默认账户在评论,没发区别以及回复,所以对代码做个一些优化,大概思路就是在执行某个需要权限的动作之前登录默认账号,完成之后,退出当前账号,大概代码就是

if (isset($_GET['pid']) ) {
	if (!is_user_logged_in()) {
	  $creds = array();
	  $creds['user_login'] = 'example'; // 用户名是 example,自行修改
	  $creds['user_password'] = 'plaintextpw'; // 密码是 plaintextpw
	  $creds['remember'] = true;
	  $user = wp_signon( $creds, false );
	}
// 需要权限的动作代码
wp_destroy_current_session();//退出当前账号
}

思路扩展

解决了这个问题,让我想起了去年遇到的一个问题,那就是让用户能够前台投稿,并且上传文件。但是百度之后,很多方案都是让投稿者进行上传文件,但是投稿者也同样需要注册却没有支持游客直接上传文件的方法。有的网站有可能支持游客直接上传文件,但是那个和 wordpress 并没有关系,那个是另外的一个上传文件的功能。

后遗症以及结语

实际上,综合来看,这个问题其实就是一个问题就是如何对游客进行提权。以及提前之后的相关处理。但是使用自动登录之后,我发现了一些问题,这个后遗症问题都被我已经被我解决。主要的后遗症问题有两个,一个是对登陆状态的判断会失效,因为使用了自动登录,如果判断是否得了吗?就没有了任何作用。这个时候我们需要对用户的角色进行判断就可以了。第二个后遗症就是可能有一些缓存插件,对已登录用户不在缓存,这个时候我们同样取消对用户是否登录的判断,而是改为对于用户角色的缓存。


乐趣公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:思考如何在 WordPress 里面对访客进行提权
喜欢 (7)
关于作者:
无折腾,不生活,我是一个WordPress菜鸟,一个玩淘宝的卖家,欢迎你认识我,我是云落!
发表我的评论
取消评论
表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(8)个小伙伴在吐槽
  1. 从贴吧顺便看过来,想说两句。供参考。你想过头了,不要依赖WordPress后台。用户不登录,不但可以上传文件,甚至可以做任何权限的事情。只要你在模板代码里面写了对应的PHP或者WordPress函数就行了。所谓注册后才可以的那些事情,本质上仅仅处于安全考虑,而不是其他。我很随意地写过两篇笔记你可以看下:wndwp.com/article/54 wndwp.com/article/55
    店小二2018-06-20 20:41 回复 Windows 10 | Firefox浏览器 60.0
  2. 可以在页面中增加“检查更新”按钮,让需求者进入该页面后自主选择是否检查更新看下有没有新版本,这种方式已经运用于WHOIS查询中,站长可以参考下。
    西昆仑2018-05-16 12:53 回复 Windows 7 | Chrome 64.0.3282.140
    • 之前确实是这么弄的,但是不够自动化。。应该追到一切无感才可以
      云落2018-05-16 13:20 回复 Windows 10 | Chrome 66.0.3359.139
  3. 看完之后感觉这个插件网站已经变成全自动了,这个也太给力了吧
    boke112导航2018-05-09 12:00 回复 Windows 7 | Chrome 66.0.3359.139
    • 全自动不能说,但是确实是相当的自动化了
      云落2018-05-09 13:57 回复 Windows 10 | Chrome 66.0.3359.139
      • 感觉已经基本自动化了 666
        龙笑天2018-05-09 20:45 回复 Windows 7 | Firefox浏览器 28.0
  4. 这种提权不知道对于安全性有无影响嗯?
    BanYuner2018-05-08 11:45 回复 Windows 10 | Chrome 66.0.3359.139
    • 从安全性来说,这种方式肯定是欠妥的。但是比你自己控制好就可以了,比如禁止这个公共用户访问后台等等,也可以自己新建一个角色,然后对这个角色进行权限控制,将这个角色权限控制到只需要的最低权限,然后将它作为公共账号。
      云落2018-05-08 13:01 回复 Linux | Chrome 46.0.2490.76