kn007的个人博客
♥ You are here: Home > > > 通过邮件验证身份登录WordPress

通过邮件验证身份登录WordPress

by | 82 Comments

8828ff221e17893fa8ebbb6

不得不说,大发的一些想法,还是不错的。

前几天,大发说博客可以用邮箱登录,不过我去测试了,没收到邮件,没试成。好囧。

因为大发没分享方法,我猜大发肯定是init钩子+AJAX请求。至于链接有效性,我就不知道大发是怎么控制了(猜是用transient或session)。

个人觉得免密码更安全一些,特别是在公共场合,毕竟邮箱现在可以扫码登录,也安全。

引自大发的话(我就不罗嗦太多了):这种方式看上去貌似有些违反直觉,但是其实这个比用密码登录更加安全。如果有人猜中或者破解了你的密码,在你更改密码之前他们都可以无限登录。你可能都不知道有人登录了你的帐号。使用邮箱登录:如果有人试图登录你都会接到通知、登录链接15分钟后就会失效、登录链接只可以使用一次。

嗯,我这次写的mail-login.php借鉴了大发的登录版面,但使用传统的form表单,而非大发使用的js。

除了采用传统表单,所有交互界面,一律用wp_die代替。使用到WP Object Cache API使用了Transients API保存一次性链接密匙,有效期10分钟。所有动作全部封装成函数了,可以拆分拿去用。因只是用晚饭时间写的,所以也没怎么测试,有bug可以提。

本产品任意主题可用,只要将以下两文件放在主题目录里面,并且在functions.php加载mail-login-support.php即可。

建议使用include,在funtions.php添加如下:
include(get_template_directory() . '/mail-login-support.php');具体效果:
mail-login-supportloper-mail-login
QQ截图20150727232407

mail-login-support.php和mail-login.php文件,详看github项目地址: https://github.com/kn007/wordpress-mail-login-to-dashboard

转载请注明转自:kn007的个人博客的《通过邮件验证身份登录WordPress

donate
有所帮助?

Comments

82 Comments立即评论
Loading...
  1. 回复

    噗自己的个人博客搞得这么认真严肃干嘛啊哈哈哈 :razz:

    1. MOD回复

      @whuted: :cool: 瞎搞

  2. 回复

    用上了,不过提示邮件发送成功邮箱却收不到。。换个邮箱也没用。

    1. MOD回复

      @旧时光: 不会邮件掉垃圾箱了吧 :mrgreen:

  3. 回复

    垃圾箱也看了,都没有,弄不明白。。

  4. 想换个头像,死活换不了,头疼

    1. MOD回复

      @猜猜我是谁: 怎么会。。

  5. 回复

    這個思路不錯 :roll:

    1. MOD回复

      @CK: 嘿嘿

  6. 回复

    修复一下网页自适应才是真

    1. MOD回复

      @muiteer: 额,怎么了是? :???:

    2. MOD回复

      @muiteer: 稀客啊,我晕! :roll: :roll: 围观

  7. LV1回复

    怎么总是认证失败啊?

    1. MOD回复

      @hawrry: 我重新用万能的语文。。翻译了下你的回复。。。

      邮件不等于邮箱首先,那么假设你说的邮箱地址审核通过,发送来的邮件,链接打开后,并不能成功登录,而是提示认证失败,对吧?

    2. LV1回复

      @kn007: 请问怎么解决哈?麻烦了!

    3. MOD回复

      @hawrry: 我在后面的评论回复了你,你试下。

  8. LV1回复

    邮件审核通过,也正常可以发送,就是审核失败……请问是怎么回事?谢谢!

    1. MOD回复

      @hawrry: 邮件审核通过?审核失败?没明白。。。
      邮件还要审核?!发送后还要审核?!

      或许你说的是邮件要审核(这点没明白,为什么邮件要审核)。。。莫非你说的是我check邮件是否存在的意思?

      发送后还要审核,指的是点击链接认证?

    2. LV1回复

      @kn007: 不好意思,可能没表达清楚,我在后台使用邮件登录,输入管理员邮箱后提示邮件已发送,而且能正常收到邮件。可是点击邮件里的内容后就提示我认证失败。

    3. LV1回复

      @hawrry: 对头……

    4. MOD回复

      @hawrry: 如果验证成功,比较大的可能是。。。我的$hash长度太长了,请把mail-login-support.php第46行的(参考github文件)

      $hash = md5(time().rand()).md5($string.rand());

      改为

      $hash = substr(md5(time().$string.rand()),8,8);

      以相对短的长度作为验证依据,反正自用,也算是安全了

    5. MOD回复

      @hawrry: 哦,了解了,你wp本身有用外部对象缓存么?我用的memcache。最简单的,你可以尝试将wp_cache_*换成相应的*_transient,这个是使用sql数据库的。
      如果你有研究精神,请在
      https://github.com/kn007/wordpress-mail-login-to-dashboard/blob/master/mail-login-support.php
      第10行wp_die的第二个参数,加上$email的输出看一下,
      或者懒得话,直接把第9行的if ($email != '')删掉,只留login_required($email);,不改第10行
      然后再试一次

    6. LV1回复

      @kn007: 不好意思,刚刚试了下两种方法,都不成功。第一种方法也改了,第二种也删除掉login_required($email);,还是显示认证失败。

    7. MOD回复

      @hawrry: 好的,看我最后一条评论,把所有改动的代码恢复原样,改下$hash,我认为$hash长度太长了,被拒绝了,请把mail-login-support.php第46行的(参考github文件)

      $hash = md5(time().rand()).md5($string.rand());

      改为

      $hash = substr(md5(time().$string.rand()),8,8);

      以相对短的长度作为验证依据,反正自用,也算是安全了

    8. MOD回复

      @hawrry: 最暴力的,把46行的$hash的值改为123先,测试一下先。

    9. LV1回复

      @kn007: 应该还是$hash长度的问题,改成8位就可以了 :razz: 另外还得将wp_cache_*换成相应的*_transient。改动这两处就OK了!太感谢了。

    10. MOD回复

      @hawrry: 不谢。我去github写个issue。看来考虑的还是不周到

    11. LV1回复

      @kn007: 麻烦了!另外请问一下,如何点击邮件中的链接,认证通过后直接跳转到wp的后台呢?对代码不是太懂 :???:

    12. MOD回复

      @hawrry: 简单。。第19行
      $redirect_to=home_url();
      改为
      $redirect_to=admin_url();

    13. MOD回复

      @hawrry: 谢谢兄弟反馈了。话说不把wp_cache_*换成相应的*_transient,不行么?

    14. LV1回复

      @kn007: 不行,仅改hash长度也不成,刚刚改成16也可以认证通过。

    15. MOD回复

      @hawrry: 8,16,可以通过是吧?最后一个参数是截取位数长度。

    16. LV1回复

      @kn007: 嗯,可以通过。但是前提是必须得把wp_cache改了。我用的是万网的轻云服务器。

    17. MOD回复

      @hawrry: wordpress版本是?

    18. LV1回复

      @kn007: 最新的4.2.4

    19. MOD回复

      @hawrry: 哦,好的,感谢!
      话说上面说的直接跳转到wp的后台,没问题了吧

    20. LV1回复

      @kn007: 非常感谢,没问题了!现在一切正常。可以把原本登录的密码框框去掉了。

    21. MOD回复

      @hawrry: 哈哈,好的。不客气。

    22. MOD回复

      @hawrry: 看了下,wp的mysql限定key长度是64。。。。

    23. LV1回复

      @kn007: 高手,膜拜!

    24. MOD回复

      @hawrry: 谬赞了 :lol:

    25. MOD回复

      @hawrry: 我更新了github
      https://github.com/kn007/wordpress-mail-login-to-dashboard
      你也可以去看看你的代码有没有改错,特别是*_transient。参数不一样。
      或者重新git clone一份试试

    26. 回复

      @kn007: 一共三处,应该没有错,hash我也是改成8,16了。PS:我对代码不熟悉,纯属业余爱好玩玩,你绝对是个好老师,讲的都到位,连我都能改明白。 :idea: :lol:

    27. MOD回复

      @hawrry: 哈哈,好的。transient只有3个参数,而wp object cache有4个参数,主要是怕这个,写错了,可能会导致链接永久有效 :mrgreen: :shock: :razz:
      看到这个头像,我突然知道你是谁了,哈哈

    28. MOD回复

      @hawrry: 话说hawrry没做跳转到youfencun,cdn拒绝了hawrry的访问 :mrgreen:

  9. MOD回复

    博主于2015-08-16 23:07修改了这篇文章。

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif