2011-10-12 17 views
7

मैं केकेपीएचपी के साथ कैसे पंजीकरण कर सकता हूं?मैं सदस्य पंजीकरण पुष्टिकरण कैसे कर सकता हूं?

पंजीकरण के बाद, यह पुष्टि के लिए ईमेल भेज देगा।

यदि मैं पुष्टि के लिए लिंक पर क्लिक करता हूं तो खाता की पुष्टि की जाएगी।

मैं यह कैसे कर सकता हूं?

क्या ऐसा करने के लिए औथ के साथ कोई कार्य है?

या क्या मुझे पंजीकरण की पुष्टि करने के लिए मैन्युअल रूप से मेल भेजना है?

मैं पंजीकरण की पुष्टि करने के लिए मैन्युअल ईमेल भेजने के लिए है, तो मैं कैसे पंजीकरण टोकन उत्पन्न कर सकते हैं, और मैं एक मान्य टोकन होने के लिए समय कैसे निर्धारित कर सकते हैं?

क्या कोई इसका उदाहरण दिखा सकता है?

+0

Google कहता है: http://www.jonnyreeves.co.uk/2008/06/cakephp-activating-user-account-via-email/ – Josh

उत्तर

4

चेक केक विकास निगमों उपयोगकर्ताओं के स्रोत प्लगइन, CakepPHP 1.3 और 2.0 के लिए अपने उपलब्ध। https://github.com/cakedc/users यह पहले से ही सबकुछ करता है - उचित एमवीसी और केकेपीएचपी तरीके से - जो आप अनुरोध करते हैं। बस प्लगइन का उपयोग करें या कुछ कोड ले लो।

+0

मुझे यकीन नहीं है कि उस प्लगइन का उपयोग कैसे करें, मेरे पास पहले से ही user_controller है, जो एड, एडिट, डिलीट, लॉग इन, लॉगआउट एक्शन के साथ है। एक उपयोगकर्ता मॉडल भी है। फिर अगर मैं यह आदेश चलाता हूं, तो केक माइग्रेशन ऑल-प्लगइन उपयोगकर्ता, क्या होगा? – shibly

+0

readme.md फ़ाइल में निर्देशों का पालन करें। आप डेटाबेस स्कीमा आयात करने के लिए केक स्कीमा का उपयोग कर सकते हैं या केक माइग्रेशन का उपयोग कर सकते हैं जिसके लिए माइग्रेशन प्लगइन की आवश्यकता होती है। यदि आपके पास पहले से कुछ शुरू हो गया है और प्लगइन का उपयोग करें, तो इसका पूरी तरह से परीक्षण (परीक्षण चलाएं), और इसे विस्तारित करें। यह readme.md – burzum

+0

में भी समझाया गया है क्या यह प्लगइन केकपीएचपी-2.0 के साथ काम करता है? – shibly

2

आप आसानी से PHP में एक टोकन की तरह एक hashCode पैदा करते हैं और यह एक टाइमस्टैम्प द्वारा की अवधि मान्य कर सकते हैं। ईमेल के लिए बस इस तरह के ईमेल घटक का उपयोग करें। यदि आप ऑथ घटक का उपयोग करना चाहते हैं, तो सुनिश्चित करें कि आपका फॉर्म आपको पासवर्ड के लिए सही हैश देता है।

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

यह जेनरेट कोड के साथ पंजीकरण करने के बाद एक ईमेल भेजता है। आप बस अपनी उपयोगकर्ता तालिका, कोड, ईमेल प्रमाणित, और बनाए गए क्षेत्र में एक फ़ील्ड जोड़ सकते हैं।जब उपयोगकर्ता लिंक पुष्टिकरण पर जाता है, तो केकफ़्पी कोड प्राप्त करता है और जांचता है कि उपयोगकर्ता मौजूद है या नहीं, यदि बनाया गया टाइमस्टैम्प बहुत पुराना नहीं है, और केवल ईमेल प्रमाणित फ़ील्ड को True पर सेट करें। – papachan

3

उपयोगकर्ता तालिका: activation_code क्षेत्र में: (md5 (समय()) या किसी बात ... नमूना)

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 ; 

जब उपयोगकर्ता पंजीकृत, यू एक अद्वितीय स्ट्रिंग सेट कर सकते हैं। अब उपयोगकर्ता के लिए इस यूआरएल की तरह ईमेल भेजें:

http://test/controller/action/activation_code 

अब आप अपने कार्रवाई में जांच करने के लिए है कि इस activation_code या उपयोगकर्ता तालिका में है नहीं किया है।

और है तो उस स्थिति = अक्षम या नहीं ....

2

ईमेल भी लोड ईमेल घटक भेजने के लिए है अगर। पहले से दिया गया रजिस्टर फ़ंक्शन अच्छा है और आपको इसके साथ जाना चाहिए।

मूल रूप से अवधारणा उपयोगकर्ता जोड़ने के लिए है, तो एक टोकन (टाइमस्टैम्प ro जो कुछ के साथ) बना सकते हैं और एक डेटाबेस को यह बचाने के लिए, तो उस टोकन के लिंक के साथ एक ईमेल भेजने के लिए है।

तो उपयोगकर्ता टोकन आप उपयोगकर्ता = सक्रिय सेट करने के लिए लिंक पर क्लिक करता है और वे अब registerd कर रहे हैं और प्रवेश कर सकते हैं जब।

अपने प्रमाणीकरण के लिए एक अच्छी टिप इसलिए प्रमाणीकरण के लिए एक "गुंजाइश" (1.3 के लिए CakePHP डॉक्स की जाँच) जोड़ने है। इस दायरे को सक्रिय करें = सक्रिय = 1. इस तरह उन्हें ईमेल लिंक से पुष्टि करने की आवश्यकता होगी, और जब तक यह पूरा नहीं हो जाता तब तक लॉगिन नहीं कर सकता। आसान!

+0

मान लीजिए कि किसी ने "उपयोगकर्ता नाम" के साथ पंजीकरण करने का अनुरोध किया है, इसलिए उपयोगकर्ता नाम और उसके पास प्रमाणीकरण कोड डेटाबेस तालिका में सहेजा गया है। अब अगर कोई अन्य उपयोगकर्ता नाम के साथ पंजीकरण करना चाहता है तो क्या होगा? – shibly

+0

अच्छी तरह से उपयोगकर्ता उस उपयोगकर्ता नाम के साथ पहले से मौजूद है, इसलिए आपको रजिस्टर फॉर्म से उपयोगकर्ता को सहेजते समय इसे सत्यापन के साथ उठाया जाना चाहिए। केकफ़्पी में एक isUnique() सत्यापन जांच है। आप इसे अपने उपयोगकर्ता नाम फ़ील्ड पर उपयोग कर सकते हैं और उपयोगकर्ता को एक त्रुटि की रिपोर्ट कर सकते हैं कि वे उपयोगकर्ता नाम चाहते हैं! –

संबंधित मुद्दे