आप क्या कर सकते हैं एक Password
बना सकते हैं DataObject
Member
. के साथ Password
. से एक से अनेक संबंध रखने वाली वस्तु वस्तु। आप पासवर्ड को एन्क्रिप्ट और डिक्रिप्ट करने के लिए 2 तरह से php एन्क्रिप्ट फ़ंक्शन के साथ लॉग इन सदस्य के नमक का उपयोग कर सकते हैं।
यह उदाहरण कोड पासवर्ड को एन्क्रिप्ट और डिक्रिप्ट करने के लिए सदस्य नमक के साथ php mcrypt का उपयोग करता है।
पासवर्ड वर्ग में एक विवरण, एक url, उपयोगकर्ता नाम और पासवर्ड होता है। इसमें दी गई कुंजी का उपयोग करके किसी दिए गए स्ट्रिंग को एन्क्रिप्ट करने के लिए एक फ़ंक्शन होता है। इसमें कनेक्टेड सदस्य नमक का उपयोग करके संग्रहीत पासवर्ड को डिक्रिप्ट करने के लिए एक डिक्रिप्ट फ़ंक्शन भी शामिल है।
पासवर्ड वर्ग
<?php
class Password extends DataObject
{
static $db = array (
'Description' => 'Text',
'URL' => 'Text',
'Username' => 'Text',
'Password' => 'Text'
);
static $has_one = array (
'Member' => 'Member'
);
public function decryptedPassword() {
return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($this->Member()->Salt), base64_decode($this->Password), MCRYPT_MODE_CBC, md5(md5($this->Member()->Salt))), "\0");
}
public function encryptPassword($key, $password) {
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $password, MCRYPT_MODE_CBC, md5(md5($key))));
}
}
पासवर्ड ऑब्जेक्ट के साथ has_many संबंध रखने के लिए हमें सदस्य ऑब्जेक्ट का विस्तार करने की आवश्यकता है:
सदस्य पासवर्ड सूची एक्सटेंशन
<?php
class MemberPasswordListExtension extends DataExtension {
private static $has_many = array(
'Passwords' => 'Password'
);
}
एक्सटेंशन जोड़ने के लिए आपकी कॉन्फ़िगरेशन में इसकी आवश्यकता है:
_config.php
...
Member::add_extension('Member', 'MemberPasswordListExtension');
...
पासवर्ड जोड़ने के लिए एक फॉर्म निम्नलिखित है। सबमिशन पर हम पासवर्ड क्लास से सदस्य नमक और एन्क्रिप्ट फ़ंक्शन का उपयोग करके पासवर्ड एन्क्रिप्ट करते हैं।
पेज_कंट्रोलर
...
public function AddPasswordForm() {
// Create fields
$fields = new FieldList(
new TextField('Description'),
new TextField('URL'),
new TextField('Username'),
new TextField('Password')
);
// Create actions
$actions = new FieldList(
new FormAction('AddPassword', 'Submit')
);
return new Form($this, 'AddPasswordForm', $fields, $actions);
}
public function AddPassword($data, $form) {
if($member = Member::currentUser()) {
$password = new Password();
$form->saveInto($password);
$password->MemberID = $member->ID;
$password->Password = $password->encryptPassword($member->Salt, $password->Password);
$password->write();
}
return $this->redirectBack();
}
...
पेज टेम्प्लेट में हम इस उपयोगकर्ता के तहत सहेजे गए पासवर्ड के माध्यम से फॉर्म और लूप को कॉल करते हैं। हम उपयोगकर्ता नाम, एन्क्रिप्टेड पासवर्ड और डिक्रिप्टेड पासवर्ड प्रदर्शित करते हैं, बस हमें यह दिखाने के लिए कि इसने काम किया है:
Page.ss टेम्प्लेट
...
<% if $CurrentMember %>
$AddPasswordForm
<% end_if %>
<% with $CurrentMember %>
<h3>Passwords</h3>
<% if $Passwords %>
<ul>
<% loop $Passwords %>
<li>$Username $Password $DecryptedPassword</li>
<% end_loop %>
</ul>
<% else %>
<p>No passwords saved</p>
<% end_if %>
<% end_with %>
...
आप जो करना चाहते हैं उसके लिए यह आपको एक आधार देना चाहिए, और आप इसे अपनी आवश्यकताओं के अनुसार बदलने में सक्षम होना चाहिए।
एन्क्रिप्शन विधि इस स्टैक ओवरफ्लो उत्तर से ली गई थी:सरलतम PHP का उपयोग करके दो-तरफ़ा एन्क्रिप्शन
आप अपनी इच्छानुसार इस कोड के बाकी हिस्सों के साथ आसानी से एक अलग एन्क्रिप्ट/डिक्रिप्ट विधि को प्रतिस्थापित कर सकते हैं।