| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <?php
- namespace Widget;
- use Typecho\Common;
- use Typecho\Cookie;
- use Typecho\Db\Exception;
- use Typecho\Validate;
- use Utils\PasswordHash;
- use Widget\Base\Users;
- if (!defined('__TYPECHO_ROOT_DIR__')) {
- exit;
- }
- /**
- * 注册组件
- *
- * @author qining
- * @category typecho
- * @package Widget
- */
- class Register extends Users implements ActionInterface
- {
- /**
- * 初始化函数
- *
- * @throws Exception
- */
- public function action()
- {
- // protect
- $this->security->protect();
- /** 如果已经登录 */
- if ($this->user->hasLogin() || !$this->options->allowRegister) {
- /** 直接返回 */
- $this->response->redirect($this->options->index);
- }
- /** 初始化验证类 */
- $validator = new Validate();
- $validator->addRule('name', 'required', _t('必须填写用户名称'));
- $validator->addRule('name', 'minLength', _t('用户名至少包含2个字符'), 2);
- $validator->addRule('name', 'maxLength', _t('用户名最多包含32个字符'), 32);
- $validator->addRule('name', 'xssCheck', _t('请不要在用户名中使用特殊字符'));
- $validator->addRule('name', [$this, 'nameExists'], _t('用户名已经存在'));
- $validator->addRule('mail', 'required', _t('必须填写电子邮箱'));
- $validator->addRule('mail', [$this, 'mailExists'], _t('电子邮箱地址已经存在'));
- $validator->addRule('mail', 'email', _t('电子邮箱格式错误'));
- $validator->addRule('mail', 'maxLength', _t('电子邮箱最多包含64个字符'), 64);
- /** 如果请求中有password */
- if (array_key_exists('password', $_REQUEST)) {
- $validator->addRule('password', 'required', _t('必须填写密码'));
- $validator->addRule('password', 'minLength', _t('为了保证账户安全, 请输入至少六位的密码'), 6);
- $validator->addRule('password', 'maxLength', _t('为了便于记忆, 密码长度请不要超过十八位'), 18);
- $validator->addRule('confirm', 'confirm', _t('两次输入的密码不一致'), 'password');
- }
- /** 截获验证异常 */
- if ($error = $validator->run($this->request->from('name', 'password', 'mail', 'confirm'))) {
- Cookie::set('__typecho_remember_name', $this->request->name);
- Cookie::set('__typecho_remember_mail', $this->request->mail);
- /** 设置提示信息 */
- Notice::alloc()->set($error);
- $this->response->goBack();
- }
- $hasher = new PasswordHash(8, true);
- $generatedPassword = Common::randString(7);
- $dataStruct = [
- 'name' => $this->request->name,
- 'mail' => $this->request->mail,
- 'screenName' => $this->request->name,
- 'password' => $hasher->hashPassword($generatedPassword),
- 'created' => $this->options->time,
- 'group' => 'subscriber'
- ];
- $dataStruct = self::pluginHandle()->register($dataStruct);
- $insertId = $this->insert($dataStruct);
- $this->db->fetchRow($this->select()->where('uid = ?', $insertId)
- ->limit(1), [$this, 'push']);
- self::pluginHandle()->finishRegister($this);
- $this->user->login($this->request->name, $generatedPassword);
- Cookie::delete('__typecho_first_run');
- Cookie::delete('__typecho_remember_name');
- Cookie::delete('__typecho_remember_mail');
- Notice::alloc()->set(
- _t(
- '用户 <strong>%s</strong> 已经成功注册, 密码为 <strong>%s</strong>',
- $this->screenName,
- $generatedPassword
- ),
- 'success'
- );
- $this->response->redirect($this->options->adminUrl);
- }
- }
|