इनमें से कोई भी जवाब "सीएसआरएफ टोकन:" लेबल को हटाने का तरीका बताता है जो त्रुटि संदेश को गैर-हैकिश तरीके से उपसर्ग करता है (उदाहरण के लिए टोकन नाम बदलना एक बुरा विचार है!)।
लेबल को हटाने का एकमात्र ध्वनि तरीका वैश्विक त्रुटि को फेंकने के लिए सीएसआरएफ सत्यापनकर्ता का विस्तार करना है। जबकि हम ऐसा करते हैं, हम त्रुटि संदेश भी बदल सकते हैं।
class myValidatorCSRFToken extends sfValidatorCSRFToken
{
protected function configure($options = array(), $messages = array())
{
parent::configure($options, $messages);
$this->addMessage('csrf_attack', 'Your session has expired. Please return to the home page and try again.');
}
protected function doClean($value)
{
try {
return parent::doClean($value);
} catch (sfValidatorError $e) {
throw new sfValidatorErrorSchema($this, array($e));
}
}
}
अब, चलो हमारे रूपों BaseForm
में sfForm::addCSRFProtection
अधिभावी द्वारा इस सत्यापनकर्ता उपयोग करने के लिए सेट कर सकते हैं:
public function addCSRFProtection($secret = null)
{
parent::addCSRFProtection($secret);
if (isset($this->validatorSchema[self::$CSRFFieldName])) //addCSRFProtection doesn't always add a validator
{
$this->validatorSchema[self::$CSRFFieldName] = new myValidatorCSRFToken(array(
'token' => $this->validatorSchema[self::$CSRFFieldName]->getOption('token')
));
}
}
स्रोत
2011-04-22 18:39:50
@naag: बहुत बहुत धन्यवाद। कुछ चीजों की कोशिश की लेकिन वह नहीं, एक खेल होगा। सिम्फनी लोगों से मामूली निगरानी की तरह लगता है। – Tom
मैंने सीएसआरएफ सत्यापनकर्ता के अस्तित्व के लिए एक चेक शामिल करने के लिए अपना उत्तर संपादित किया :-) – naag