如何註冊CakePHP?如何進行會員註冊確認?
註冊後,會發送郵件確認。
如果我點擊鏈接進行確認,那麼賬戶將被確認。
我怎樣才能做到這一點?
是否有任何功能與Auth做到這一點?
或者我是否必須手動發送郵件以確認註冊?
如果我必須手動發送電子郵件以確認註冊,那麼我如何生成註冊令牌,以及如何將時間設置爲有效令牌?
任何人都可以顯示這樣的例子嗎?
如何註冊CakePHP?如何進行會員註冊確認?
註冊後,會發送郵件確認。
如果我點擊鏈接進行確認,那麼賬戶將被確認。
我怎樣才能做到這一點?
是否有任何功能與Auth做到這一點?
或者我是否必須手動發送郵件以確認註冊?
如果我必須手動發送電子郵件以確認註冊,那麼我如何生成註冊令牌,以及如何將時間設置爲有效令牌?
任何人都可以顯示這樣的例子嗎?
檢查Cake Development Corporations用戶插件的來源,它可用於CakepPHP 1.3和2.0。 https://github.com/cakedc/users它已經完成了所有工作 - 以適當的MVC和CakePHP方式 - 您提出要求。只需使用插件或採取一些代碼。
您可以在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);
}
用戶表:
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 ;
當用戶註冊,U可以設置一個唯一的字符串:在activation_code場(樣本MD5(時間())或任何事情...)。 現在這個樣子URL發送電子郵件給用戶:
http://test/controller/action/activation_code
現在你有你的行動來檢查這activation_code是用戶表或沒有。
如果是那麼是狀態=禁用或不...
也發送電子郵件加載電子郵件組件。已經給出的註冊函數是很好的,你應該去做。
基本的概念是添加用戶,然後創建一個令牌(帶時間戳ro)然後將其保存到數據庫中,然後發送帶有該令牌鏈接的電子郵件。
然後,當用戶點擊鏈接到令牌您設置用戶=活動,他們現在註冊並可以登錄。
因此,爲您的驗證提供一個很好的提示是將「範圍」(檢查1.3的cakephp文檔)添加到驗證。使這個範圍成爲active = 1的條件。這樣他們將需要通過電子郵件鏈接進行確認,並且直到完成後才能登錄。簡單!
假設有人要求註冊一個「用戶名」,所以用戶名和它的相關認證碼被保存到數據庫表中。現在如果有人想用相同的用戶名註冊會發生什麼? – shibly
那麼用戶已經存在這個用戶名,所以當從註冊表中保存一個用戶時,你應該選擇驗證。在Cakephp中有一個isUnique()驗證檢查。您可以在您的用戶名字段中使用該名稱,並向用戶報告他們想要的用戶名已不存在的錯誤! –
谷歌說:http://www.jonnyreeves.co.uk/2008/06/cakephp-activating-user-account-via-email/ – Josh