Как я могу подтвердить регистрацию участника?

Как я могу зарегистрироваться в CakePHP?

После регистрации вам будет отправлено электронное письмо с подтверждением.

Если я нажму ссылку для подтверждения, учетная запись будет подтверждена.

Как я могу это сделать?

Есть ли какая-нибудь функция с Auth для этого?

Или мне нужно отправлять почту вручную для подтверждения регистрации?

Если мне нужно отправить электронное письмо вручную для подтверждения регистрации, то как я могу сгенерировать регистрационный токен и как установить время, которое будет действительным токеном?

Кто-нибудь может показать пример этого?


person shibly    schedule 12.10.2011    source источник
comment
Google сообщает: jonnyreeves.co.uk/ 2008/06 /   -  person Josh    schedule 12.10.2011


Ответы (4)


Проверьте источник пользовательского плагина Cake Development Corporation, он доступен для CakepPHP 1.3 и 2.0. https://github.com/cakedc/users Он уже делает все - в правильном формате MVC и CakePHP. - что вы просите. Просто используйте плагин или возьмите часть кода.

person floriank    schedule 13.10.2011
comment
Я не уверен, как использовать этот плагин, у меня уже есть users_controller с действиями добавления, редактирования, удаления, входа в систему, выхода из системы. Также есть пользовательская модель. Что произойдет, если я запустил эту команду, чтобы все пользователи -plugin перенесли миграцию пирога? - person shibly; 18.10.2011
comment
Следуйте инструкциям в файле readme.md. Вы можете использовать схему торта для импорта схемы базы данных или использовать миграцию торта, для которой требуется плагин миграции. Если у вас уже есть что-то, начните заново и используйте плагин, полностью протестируйте его (запустите тесты) и расширьте его. Это также объясняется в readme.md. - person floriank; 20.10.2011
comment
Да, я написал это в своем ответе. Проверьте ветку 2.0. - person floriank; 21.10.2011
comment
Я думаю, что лучше просто разобраться через cakephp. Плагины всегда создают такую ​​нагрузку, когда вы хотите изменить поведение по умолчанию. Следовательно, мне не нравится wordpress - person bicycle; 29.07.2013

таблица пользователей:

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(255) COLLATE utf8_persian_ci NOT NULL,
  `password` varchar(255) COLLATE utf8_persian_ci NOT NULL,
  `email` varchar(100) COLLATE utf8_persian_ci NOT NULL,
  `created` datetime NOT NULL,
  `status` tinyint(1) NOT NULL,
  `activation_code` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=4 ;

когда пользователь зарегистрирован, вы можете установить уникальную строку (пример: md5 (time ()) или что угодно ...) в поле Activ_code. теперь отправьте электронное письмо с таким адресом пользователю:

http://test/controller/action/activation_code

теперь вы должны проверить в своем действии, находится ли этот код активации в таблице пользователя или нет.

и если это, то это статус = отключение или нет ....

person Chalist    schedule 12.10.2011

Вы можете легко сгенерировать хэш-код, например токен в PHP, и проверить его продолжительность с помощью TimeStamp. Для электронной почты просто используйте компонент «Электронная почта», подобный этому. Если вы хотите использовать Auth Component, убедитесь, что ваша форма дает вам правильный хеш для пароля.

function register() {
    $error = false;
    $error_captcha = null;
    if(isset($this->data)){
        App::import('Component','Generate');
        App::import('Component', 'Converter'); 
        App::import('Component','Email');
        if(empty($this->data['User']['password'])||strlen($this->data['User']['password'])<5){
            $this->User->invalidate("password");
            $error = TRUE;
        }
        if($this->data['User']['password']<>$this->data['Temp']['password']){
            $this->User->invalidate("seotitle");
            $error = TRUE;
        }       
        $captcha_respuesta = recaptcha_check_answer ($this->captcha_privatekey,
        $_SERVER["REMOTE_ADDR"],
        $_POST["recaptcha_challenge_field"],
        $_POST["recaptcha_response_field"]);
        if ($captcha_respuesta->is_valid && !$error) {
        $this->data['User']['coderegistration'] = $this->generate->getUserCode();
        $this->data['User']['displayname'] = $this->data['User']['firstname'] . " " . $this->data['User']['lastname'];
        $this->data['User']['seotitle'] =  $this->converter->seotitle($this->data['User']['username']);
        $this->data['User']['password'] =  md5($this->data['User']['username'].$this->data['User']['password']);
        $this->User->id = NULL;
        if($this->User->save($this->data)){
            /*
            =========================
            send email notification
            =========================
            */
            $email = $this->data['User']['email'];              
            $content = sprintf('<a href="%s/%s">here</div>', $this->url, $this->data['User']['coderegistration']);
            $this->email->to = $email; 
            $this->email->subject = 'you have been registered, please confirm'; 
            $this->email->replyTo = '[email protected]'; 
            $this->email->from = "name <[email protected]>";                
    $this->email->template = 'notification'; 
            $this->email->sendAs = 'html';
        $this->set('value', $content);  
        if($this->email->send()){
                // OK                   
        }else{
            trigger_error("error Mail");
        }
        }




        }else{
           $error_captcha = $captcha_respuesta->error;
           $this->set('error_email',true);
        }



    }
    $this->setTitlePage();
    $this->layout = "home";
    $this->set('backurl', '/');
    $this->set('posturl','');
    $this->set('captcha_publickey',$this->captcha_publickey);

    }
person papachan    schedule 12.10.2011
comment
Он отправляет электронное письмо после регистрации с помощью сгенерированного кода. Вы просто можете добавить поле в свою таблицу пользователей, код, подтвердить электронную почту и создать. Когда пользователь переходит на подтверждение ссылки, cakephp получает код и проверяет, существует ли пользователь, не слишком ли устарела созданная временная метка, и просто устанавливает для поля emailauthentificated значение True. - person papachan; 18.10.2011

чтобы отправить электронное письмо, загрузите также компонент «Электронная почта». Приведенная функция регистрации хороша, и вам следует с ней согласиться.

в основном концепция состоит в том, чтобы добавить пользователя, затем создать токен (с отметкой времени, что угодно) и сохранить его в базе данных, а затем отправить электронное письмо со ссылкой на этот токен.

Затем, когда пользователь щелкает ссылку на токен, вы устанавливаете user = active, и теперь они зарегистрированы и могут войти в систему.

Поэтому хорошим советом для вашего Auth является добавление "области" (проверьте документацию cakephp для 1.3) в Auth. Сделайте эту область видимостью, что active = 1. Таким образом, им нужно будет получить подтверждение по электронной почте, и они никогда не смогут войти в систему, пока это не будет сделано. Легкий!

person Luke Barker    schedule 12.10.2011
comment
Предположим, кто-то запросил регистрацию с использованием имени пользователя, поэтому имя пользователя и соответствующий код аутентификации сохраняются в таблице базы данных. Что произойдет, если кто-то еще захочет зарегистрироваться под тем же именем пользователя? - person shibly; 13.10.2011
comment
Что ж, тогда пользователь уже существует с этим именем пользователя, поэтому вы должны выбрать его с помощью проверки при сохранении пользователя из формы регистрации. В Cakephp есть проверка isUnique (). Вы можете использовать это в поле своего имени пользователя и сообщить пользователю об ошибке, что желаемое имя пользователя пропало! - person Luke Barker; 18.10.2011