2011-10-12 93 views
7

如何註冊CakePHP?如何進行會員註冊確認?

註冊後,會發送郵件確認。

如果我點擊鏈接進行確認,那麼賬戶將被確認。

我怎樣才能做到這一點?

是否有任何功能與Auth做到這一點?

或者我是否必須手動發送郵件以確認註冊?

如果我必須手動發送電子郵件以確認註冊,那麼我如何生成註冊令牌,以及如何將時間設置爲有效令牌?

任何人都可以顯示這樣的例子嗎?

+0

谷歌說:http://www.jonnyreeves.co.uk/2008/06/cakephp-activating-user-account-via-email/ – Josh

回答

4

檢查Cake Development Corporations用戶插件的來源,它可用於CakepPHP 1.3和2.0。 https://github.com/cakedc/users它已經完成了所有工作 - 以適當的MVC和CakePHP方式 - 您提出要求。只需使用插件或採取一些代碼。

+0

我不知道如何使用該插件,我已經有一個users_controller添加,編輯,刪除,登錄,註銷操作。還有一個用戶模型。然後,如果我運行這個命令,蛋糕遷移全部 - 插件用戶,會發生什麼? – shibly

+0

按照readme.md文件中的說明進行操作。您可以使用Cake模式導入數據庫模式或使用需要遷移插件的Cake遷移。如果你已經有了一些重新開始使用插件,那麼它已經完全測試過了(運行測試)並且擴展它。這也在readme.md – burzum

+0

中解釋該插件是否可以與CakePHP-2.0一起使用? – shibly

2

您可以在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); 

    } 
+0

你能解釋你的代碼嗎? – shibly

+0

它在註冊生成的代碼後發送電子郵件。您只需添加一個字段到您的用戶表,代碼,電子郵件地址和創建。當用戶訪問鏈接確認時,cakephp會收到代碼並檢查用戶是否存在,如果創建的時間戳不是太舊,並且只將emailauthentificated字段設置爲True。 – papachan

3

用戶表:

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是用戶表或沒有。

如果是那麼是狀態=禁用或不...

2

也發送電子郵件加載電子郵件組件。已經給出的註冊函數是很好的,你應該去做。

基本的概念是添加用戶,然後創建一個令牌(帶時間戳ro)然後將其保存到數據庫中,然後發送帶有該令牌鏈接的電子郵件。

然後,當用戶點擊鏈接到令牌您設置用戶=活動,他們現在註冊並可以登錄。

因此,爲您的驗證提供一個很好的提示是將「範圍」(檢查1.3的cakephp文檔)添加到驗證。使這個範圍成爲active = 1的條件。這樣他們將需要通過電子郵件鏈接進行確認,並且直到完成後才能登錄。簡單!

+0

假設有人要求註冊一個「用戶名」,所以用戶名和它的相關認證碼被保存到數據庫表中。現在如果有人想用相同的用戶名註冊會發生什麼? – shibly

+0

那麼用戶已經存在這個用戶名,所以當從註冊表中保存一個用戶時,你應該選擇驗證。在Cakephp中有一個isUnique()驗證檢查。您可以在您的用戶名字段中使用該名稱,並向用戶報告他們想要的用戶名已不存在的錯誤! –