我在CE1.9.1中遇到了这个问题。
当用户注册(在结账时或从创建帐户链接时无关紧要)时,即使正确地重新输入密码,用户仍会收到密码不匹配错误。
表单验证不表示未匹配,但是一旦用户点击Register,它就会返回不匹配错误。
Chrome控制台中没有错误......
但我不相信这是同样的错误。
我需要尽快解决,非常感谢任何帮助!
答案 0 :(得分:5)
我们的网上商店也有这个问题。但是我们使用了结帐扩展程序。所以我不确定这是否适用于常规标准结账。反正。
问题应该是,你使用结账延期吗?
如果是这样,该扩展名的模型文件中的值设置为:
$customer->setConfirmation($password);
但应该是:
$customer->setPasswordConfirmation($password);
对我来说这很有效,但没有改变核心内容。只是扩展应该得到一个小的更新,或者你可以像我一样手动完成。只需在扩展程序的模型映射文件中找到该行。
答案 1 :(得分:2)
作为解决方法,您可以使用以下代码:
$confirmation = $this->getConfirmation();
$passwordconfirmation = $this->getPasswordConfirmation();
//if ($password != $confirmation) {
if (!(($password == $confirmation) ||
($password == $passwordconfirmation))) {
$errors[] = Mage::helper('customer')->__('Please make sure your passwords match.');
}
答案 2 :(得分:1)
根据@Pedro的建议更改app / code / core / Mage / Customer / Model / Customer.php会破坏“忘记密码”和“编辑客户帐户”页面的功能。而是对
进行以下更改app/code/core/Mage/Checkout/Model/Type/Onepage.php
编辑从369开始的行
if ($quote->getCheckoutMethod() == self::METHOD_REGISTER) {
// set customer password
$customer->setPassword($customerRequest->getParam('customer_password'));
$customer->setConfirmation($customerRequest->getParam('confirm_password'));
} else {
// emulate customer password for quest
$password = $customer->generatePassword();
$customer->setPassword($password);
$customer->setConfirmation($password);
}
并设置PasswordConfirmation -Property而不是Customer-Object的Confirmation-Property:
if ($quote->getCheckoutMethod() == self::METHOD_REGISTER) {
// set customer password
$customer->setPassword($customerRequest->getParam('customer_password'));
$customer->setPasswordConfirmation($customerRequest->getParam('confirm_password'));
} else {
// emulate customer password for quest
$password = $customer->generatePassword();
$customer->setPassword($password);
$customer->setPasswordConfirmation($password);
}
答案 3 :(得分:1)
遇到同样的问题并修复了它。 Snel的答案更贴近正确答案。问题可能在于外部/本地模块,因此您应该检查
app/code/core/Mage/Checkout/Model/Type/Onepage.php
当然不要在任何情况下修改它! 但是你应该找到在你的情况下使用的_validateCustomerData()方法。使用Mage :: log()或debug_backtrace()。它可能看起来像(但不完全是因为这部分可能因某种原因而被修改):
if ($quote->getCheckoutMethod() == self::METHOD_REGISTER) {
// set customer password
$customer->setPassword($customerRequest->getParam('customer_password'));
$customer->setConfirmation($customerRequest->getParam('confirm_password'));
} else {
// emulate customer password for quest
$password = $customer->generatePassword();
$customer->setPassword($password);
$customer->setConfirmation($password);
}
这些模块扩展了旧版本的核心文件,因此如果您的模块未更新,您应该自行更改并更改
setConfirmation()
到目前可用的模拟:
setPasswordConfirmation()
答案 4 :(得分:0)
我也有同样的问题。我对代码感到不舒服,所以我想避免上述所有问题。为了解决这个问题,我所做的只是更新我的扩展,我还禁用了一个页面检出,清除了缓存,然后重新启用了一页结帐。
现在已经解决了这个问题而无需修改代码。
希望它对你有所帮助。
答案 5 :(得分:0)
除非这确实是一个核心错误,否则我不建议更改核心文件。但我这样解决了打开app \ code \ core \ Mage \ Customer \ Model \ Customer.php并编辑下面的代码< / p>
$confirmation = $this->getConfirmation();
$passwordconfirmation = $this->getPasswordConfirmation();
//if ($password != $confirmation) {
if (!(($password == $confirmation) ||
($password == $passwordconfirmation))) {
$errors[] = Mage::helper('customer')->__('Please make sure your passwords match.');
}
答案 6 :(得分:0)
如果有人仍然无法弄清楚,为什么会发生这种情况: Conlabz Useroptin扩展(http://www.magentocommerce.com/magento-connect/newsletter-double-opt-in-for-customers.html)也可能导致此行为。
答案 7 :(得分:0)
我在更新到1.9.2.1之后遇到了同样的问题,并且无法使用此处和其他地方的一些建议的代码更改来解决 - 出于显而易见的原因,也非常不愿意更改核心代码。
我的解决方案 - 配置更新。那是:
根据上述内容我更新为是/否/是并清除了缓存。这通过插入标准客户注册表单(而不是将注册附加到结算信息的末尾)并在成功注册时将该信息传递到结算表单来解决问题。
似乎这里有一个代码问题,但是这对我来说是一个很好的解决方法。希望能帮助到你。
答案 8 :(得分:-1)
更改此代码
app\code\core\Mage\Customer\Model\Customer.php
$confirmation = $this->getPasswordConfirmation();
到此代码
$confirmation = $this->getConfirmation();