最近在研究 Spring Cloud 微服务
框架,便研究了一下它的OAuth2
认证模式,想着在Typecho
中也对接下,后面就不用再次输入账号密码了,很是方便。
其中技术难点,是 Typecho
的免密登录方式,看到官方文档说的是封装在了Widget_User
组件中,开发人员可调用此组件免密登录。
但是验证了好久,都无法登录成功,又研究了聚合登录的插件中的免密登录(见下方)方法,也不是很好使。
//使用用户uid登录
private function useUidLogin($uid, $expire = 0)
{
$authCode = function_exists('openssl_random_pseudo_bytes') ?
bin2hex(openssl_random_pseudo_bytes(16)) : sha1(Typecho_Common::randString(20));
$user = array('uid'=>$uid,'authCode'=>$authCode);
Typecho_Cookie::set('__typecho_uid', $uid, $expire);
Typecho_Cookie::set('__typecho_authCode', Typecho_Common::hash($authCode), $expire);
//更新最后登录时间以及验证码
$this->db->query($this->db
->update('table.users')
->expression('logged', 'activated')
->rows(array('authCode' => $authCode))
->where('uid = ?', $uid));
}
这个是根据用户的 uid
进行免密登录,但是调用 $this->user->hasLogin()
来判断用户是否登录,一直是 false
;
查了查资料,看到了一篇《Typecho不改核心代码实现自定义登录、注册功能》文档,然后给了一个思路,研究一下1.2.1
版本用户那块的代码;
在/var/Widget/User.php
中,用户登录跟聚合登录的方式一样,但是就是不好使,再向下有一个方法,叫 simpleLogin
; 注解也写的很好“只需要提供uid或者完整user数组即可登录的方法, 多用于插件等特殊场合”,直接调用 $this->user->simpleLogin($uid)
,即可登录成功。
只要思想不滑坡,方法总比困难多。
确实方便一些,认证登陆