这其实是优化用户体验,但是我这小破站又哪里来的用户呢?(一定会有的,我相信!)


注册自定义密码问题

昨天(2020.2.18这个小站搭建起来了),这是本人的第一个使用Typecho搭建的动态博客,很兴奋的。今天打算邀请朋友们来注册玩玩,但是发现了一个很不友好的问题——注册时并不能自定义密码。折腾了2个小时左右吧,确定了两个可行的解决方案。

  1. 使用插件。

    • 比较稳妥,不容易出问题。
  2. 修改内核。

    • 有风险,但是有满足感。
      也不管了慢慢来说吧,两种都来说说。

使用插件(Rdog--权限狗插件)

插件大家都会用了吧,我放一个项目地址在这里,有兴趣的去看看就行啦,启用后就可以自定义密码啦!
项目地址:https://github.com/jrotty/Rdog
当然啦,这个权限狗还有其它功能大家可以去玩玩

修改内核

这就是我花了一个半小时解决问题的解决方案,真是让人头大啊,最无语的是我自己改完之后就找到了上那个插件。所以说我还是准备把这次折腾的过程记录下来。

  • 说真的之前一直希望找到一款插件能够直接解决注册的这个问题。别问为什么,问就是懒。
    再一个昨天也比较无聊,就翻了翻Typecho的社区,发现有老哥说可以通过修改内核来达到这个目的,于是呢就来折腾一下吧
  • 先得解决的是改哪些文件,乱改可是要出问题的啊。打开注册页面发现注册页面文件位于:/admin/register.php
    不管啥了先搞两个输入框出来,找个模板抄抄(Copy本质):

在文件的20—27行找到了如下代码:

<p>
    <label for="name" class="sr-only"><?php _e('用户名'); ?></label>
    <input type="text" id="name" name="name" placeholder="<?php _e('用户名'); ?>" value="<?php echo $rememberName; ?>" class="text-l w-100" autofocus />
</p>
<p>
    <label for="mail" class="sr-only"><?php _e('Email'); ?></label>
    <input type="email" id="mail" name="mail" placeholder="<?php _e('Email'); ?>" value="<?php echo $rememberMail; ?>" class="text-l w-100" />
</p>

register 1

于是我快速的在27行以后Ctrl+CCtrl+V上去,并修改一点点东西:

<p>
    <label for="password" class="sr-only"><?php _e('密码'); ?></label>
    <input type="password" id="password" name="password" placeholder="<?php _e('密码'); ?>" value="<?php echo $rememberPassword; ?>" class="text-l w-100" autofocus />
</p>
<p>
    <label for="confirm" class="sr-only"><?php _e('确认密码'); ?></label>
    <input type="password" id="confirm" name="confirm" placeholder="<?php _e('确认密码'); ?>" value="<?php echo $rememberConfirm; ?>" class="text-l w-100" />
</p>

当然,这里我有一个朋友会发现注册页面已经改好了,立刻冲冲地去注册。但是他发现依旧是随机密码。无中生友
看来还得改一个地方啊。于是我又开始寻寻觅觅。(此处应该歌一曲~~)

  • 看来这个问题是内核里面的了去,最后又发现一个文件/var/Widget/Register.php这个应该就是了。

于是乎我又开始了,Ctrl+F输入Password找到了这样一个神奇的代码(吹爆可读性!!)

$dataStruct = array(
    'name'      =>  $this->request->name,
    'mail'      =>  $this->request->mail,
    'screenName'=>  $this->request->name,
    'password'  =>  $hasher->HashPassword($generatedPassword),
    'created'   =>  $this->options->time,
    'group'     =>  'subscriber'
);

看来$generatedPassword就是生成随机密码的函数了,赶紧去瞧瞧:

$generatedPassword = Typecho_Common::randString(7);

这就好办了,把他换一下就完事:

if (array_key_exists('password', $_REQUEST)) {
    $generatedPassword = $this->request->password;
}
else
{
    $generatedPassword = Typecho_Common::randString(7);
}

当然如果你喜欢可以改成必须自定义密码,我这个就是不自定义密码就让他随机生成吧,省事。
把改好的文件会传回去就完事了,折腾完毕!


自我总结一下

折腾效果不佳建议使用插件或者有此功能的主题

Last modification:March 8th, 2020 at 08:31 pm
没事情别点,不用打赏啥的。