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( '用户 %s 已经成功注册, 密码为 %s', $this->screenName, $generatedPassword ), 'success' ); $this->response->redirect($this->options->adminUrl); } }