3caebb3b20
* Add feed widget * add feed render * Add CommentPage widget * New theme (#1390) * 调整忽略目录 * add theme * fix theme scss build Co-authored-by: fen <f3nb0x@gmail.com> * s/is_writeable/is_writable/g * New upgrade method * merge new fixes from master * add pgsql ssl mode support (ref #1600) (#1623) * Feat/code refactor (#1626) * remove all magic methods, add type for class properties * refactor codes * fix all * refactor code * fix type * fix all * fix request is method * fix all * fix router * fix get page * fix 1.3.0 upgrade * [feat] support high resolution avatar * fix types in i18n component * Implement Ctrl+S or Command+S for save draft (#1628) * Implement Ctrl+S or Command+S for save draft * rename * add Typecho.savePost * fix upload file size * add new uploader * replace new uploader * fix textarea change * fix preview * refactor post edit * fix issue * fix page edit --------- Co-authored-by: joyqi <joyqi@segmentfault.com> Co-authored-by: joyqi <magike.net@gmail.com> * fix #1632 * Add svg to image types * Feat/tree pages (#1646) * add tree trait * finish category tree trait * support select fields * fix select fields * refactor admin trait * fix draft status * Add new contents type "revision" * minor refactor * add more tree view abstracts * add tree trait to pages * get ready for tree view pages * improve page edit * fix revision * fix slug * add router params delegate * fix params delegate * fix * fix * fix all * fix all * fix tree * fix page link * fix feed * fix page * fix permalink * fix permalink input * fix offset query * Support IDN (#1629) * Support IDN * use js * Optimize code * Optimize code * fix URL script * remove unnecessary use --------- Co-authored-by: joyqi <joyqi@segmentfault.com> * fix input element * fix #1651, close #1653 * Use json instead of serialize (#1624) * Use json instead of serialize * Fix Upgrade code * add tree trait * finish category tree trait * support select fields * fix select fields * refactor admin trait * fix draft status * Add new contents type "revision" * minor refactor * add more tree view abstracts * add tree trait to pages * get ready for tree view pages * improve page edit * fix revision * fix slug * add router params delegate * fix params delegate * fix * fix * fix all * fix all * fix tree * fix page link * fix feed * fix page * fix permalink * fix permalink input * fix offset query * Fix typo * remove proxy methods * remove unnecessary useage --------- Co-authored-by: joyqi <joyqi@segmentfault.com> Co-authored-by: joyqi <magike.net@gmail.com> * Fix Prevent XSS vulnerability in default theme (#1654) * Fix Prevent XSS vulnerability in default theme * Update var/Typecho/Db/Adapter/Pdo.php * fix the getter --------- Co-authored-by: joyqi <joyqi@segmentfault.com> * add throwCallback to widget response * fix: cut down fields when selecting recent posts * fix typo errors * fix typo errors * fix http client cookie * add throw finish * fix theme lang * fix default theme * fix query * add open graph and twitter card support add canonical link * fix canonical link meta * fix theme classic-22 * remove unnecessary scss file when packaging * init plugin signal * improve: remove feather-icon js file * fix: typo * improve: post detail layout * fix tags saving * improve: nav search * fix: theme screenshot * fix: theme page layout * remove php 7.2/7.3 env --------- Co-authored-by: fen <f3nb0x@gmail.com> Co-authored-by: Lu Fei <52o@qq52o.cn>
108 lines
3.8 KiB
PHP
108 lines
3.8 KiB
PHP
<?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->get('name'));
|
|
Cookie::set('__typecho_remember_mail', $this->request->get('mail'));
|
|
|
|
/** 设置提示信息 */
|
|
Notice::alloc()->set($error);
|
|
$this->response->goBack();
|
|
}
|
|
|
|
$hasher = new PasswordHash(8, true);
|
|
$generatedPassword = Common::randString(7);
|
|
|
|
$dataStruct = [
|
|
'name' => $this->request->get('name'),
|
|
'mail' => $this->request->get('mail'),
|
|
'screenName' => $this->request->get('name'),
|
|
'password' => $hasher->hashPassword($generatedPassword),
|
|
'created' => $this->options->time,
|
|
'group' => 'subscriber'
|
|
];
|
|
|
|
$dataStruct = self::pluginHandle()->call('register', $dataStruct);
|
|
|
|
$insertId = $this->insert($dataStruct);
|
|
$this->db->fetchRow($this->select()->where('uid = ?', $insertId)
|
|
->limit(1), [$this, 'push']);
|
|
|
|
self::pluginHandle()->call('finishRegister', $this);
|
|
|
|
$this->user->login($this->request->get('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);
|
|
}
|
|
}
|