SUPEE-9767 প্যাচ / সিই 1.9.3.3 - একটি পৃষ্ঠা চেকআউট - গ্রাহক নিবন্ধকরণ ইস্যু


19

সফল , গ্রাহক রেজিস্ট্রেশন চেকআউট চালু করার পরে, নতুন 'ফর্ম কী বৈধকরণ অন চেকআউট সক্ষম করুন' সেটিংসটি চালু করে, সুপারি -8788, সুপারি -9652 এবং এসপিইই -9796 সহ প্যাচযুক্ত ম্যাজেন্টো 1.9.2.4 এর একটি পরিষ্কার, ভ্যানিলা ইনস্টল-এ রয়েছে On ডিফল্ট ওয়ান পেজ চেকআউট, কোনও নতুন গ্রাহক তৈরি হয় না এবং গ্রাহক লগ ইন হয় না, যদিও অর্ডার জরিমানার মধ্য দিয়ে যায়।

'চেকআউট অন ফর্ম কী বৈধকরণ সক্ষম করুন' সেটিংস বন্ধ করা আবার এই কাজটিকে সক্রিয় করে তোলে। অন্য কারও কি এই সমস্যা আছে? কোন শিপিং / পেমেন্ট পদ্ধতি ব্যবহার করা হচ্ছে তা বিবেচ্য নয়।

আমি তখন থেকে ম্যাজেন্টো ১.৯.৩.৩ এর একটি তাজা, নিরবচ্ছিন্ন ইনস্টলেশন দ্বারা এটি চেষ্টা করেছি এবং মনে হচ্ছে এটি একই সমস্যা। এক পৃষ্ঠার চেকআউটের মাধ্যমে কোনও নতুন গ্রাহককে নিবন্ধভুক্ত করার সময়, কোনও গ্রাহক অর্ডার দিয়েও তৈরি হয় না যতক্ষণ না 'চেকআউট অন ফর্ম কী বৈধকরণ সক্ষম করুন' সেটিংস চালু থাকে।

উত্তর:


36

ঠিক আছে এখানে আসল বাগ ফিক্সটি নিয়ে এসেছি।

প্রতিস্থাপন /skin/frontend/base/default/js/opcheckout.jsকরে setMethod()পদ্ধতিটি সম্পাদনা করুন এবং সম্পাদনা করুন :

setMethod: function(){
    if ($('login:guest') && $('login:guest').checked) {
        this.method = 'guest';
        new Ajax.Request(
            this.saveMethodUrl,
            {method: 'post', onFailure: this.ajaxFailure.bind(this), parameters: {method:'guest'}}
        );
        Element.hide('register-customer-password');
        this.gotoSection('billing', true);
    }
    else if($('login:register') && ($('login:register').checked || $('login:register').type == 'hidden')) {
        this.method = 'register';
        new Ajax.Request(
            this.saveMethodUrl,
            {method: 'post', onFailure: this.ajaxFailure.bind(this), parameters: {method:'register'}}
        );
        Element.show('register-customer-password');
        this.gotoSection('billing', true);
    }
    else{
        alert(Translator.translate('Please choose to register or to checkout as a guest').stripTags());
        return false;
    }
    document.body.fire('login:setMethod', {method : this.method});
},

সঙ্গে:

setMethod: function(){
    var formKey = $('checkout-step-login').select('[name=form_key]')[0].value;
    if ($('login:guest') && $('login:guest').checked) {
        this.method = 'guest';
        new Ajax.Request(
            this.saveMethodUrl,
            {method: 'post', onFailure: this.ajaxFailure.bind(this), parameters: {method:'guest', form_key:formKey}}
        );
        Element.hide('register-customer-password');
        this.gotoSection('billing', true);
    }
    else if($('login:register') && ($('login:register').checked || $('login:register').type == 'hidden')) {
        this.method = 'register';
        new Ajax.Request(
            this.saveMethodUrl,
            {method: 'post', onFailure: this.ajaxFailure.bind(this), parameters: {method:'register', form_key:formKey}}
        );
        Element.show('register-customer-password');
        this.gotoSection('billing', true);
    }
    else{
        alert(Translator.translate('Please choose to register or to checkout as a guest').stripTags());
        return false;
    }
    document.body.fire('login:setMethod', {method : this.method});
},

প্যাচটির ভি 2 অপেক্ষা করার সময় এটি তা করবে


খুশী হলাম। আমি উপযুক্ত ইনপুট ক্ষেত্রটি খুঁজতে প্রোটোটাইপটি ব্যবহার করতে খুব অলস ছিলাম।
পিটার ও'ক্যালাহান

@ পিটারও'ক্যালাহান হ্যাঁ প্রোটোটাইপ কাজ করতে বেদনাদায়ক যখন আপনি jQuery ব্যবহার করেন ^^
রাফেল ডিজিটাল পিয়ানোবাদ

1
এই মুহুর্তে আপনার চেকআউটটিতে "form_key" নামক কোনও উপাদান না থাকলে কী হবে? সম্ভাবনা কত বড়?
আরজেন মিদেমা

1
@ পাজ আমাকে জানাতে ধন্যবাদ। কোনও সমস্যা ছাড়াই এখন বেশ কয়েকটি দোকানে এটি প্রয়োগ করা হয়েছে
আরজেন মিদেমা

1
@ রাফেলাট ডিজিটাল পিয়ানিজম: আমি আপনার চেষ্টা করেছি কিন্তু তাতে আমার কোন উপকার হয়নি?
অনুরাগ খান্দেলওয়াল

15

আপনি যখন নিবন্ধটি নির্বাচন করুন এবং চালিয়ে যান, তখন checkout.setMethod()অবস্থিত জেএস স্ক্রিপ্ট কল করে skin/frontend/base/default/js/opcheckout.js। সেখান থেকে আমরা দেখতে পাচ্ছি এটি একটি এজাক্স পোস্টের জন্য অনুরোধ করে this.saveMethodUrlতবে এটি কেবলমাত্র পরামিতিটিই পাস করে method। যদি আমরা এটি দেখি Mage_Checkout_OnepageController::saveMethodAction, যা সেই এজেএক্স অনুরোধের লক্ষ্য, তবে আমরা দেখতে পাচ্ছি যে প্যাচটি যুক্ত হয়েছে:

if ($this->isFormkeyValidationOnCheckoutEnabled() && !$this->_validateFormKey()) {
        return;
}

যেহেতু অনুরোধটিতে _validateFormKeyকোনও form_keyপ্যারামিটার সন্ধান করা হয়েছে এবং যেহেতু এজেএক্স setMethodঅনুরোধটি করেছে তখন জেএস অনুরোধটি এটি প্রেরণ করেনি, এটি কেবল তাড়াতাড়ি ফিরে আসে এবং কিছুই করে না। setMethodফাংশনে ফিরে আসুন এবং আমরা দেখতে পাচ্ছি যেহেতু এটি কোনও রিটার্ন মান দিয়ে কিছু করার চেষ্টা করে না, অন্য কিছুই ঘটে না এবং জেএস চালিয়ে যায়। এই মুহুর্তে জেএস সেট করেছে this.method = 'register'তবে উদ্ধৃতিটি আপডেট করা হয়নি, তাই checkout_methodডিফল্ট 'অতিথি'।

যেহেতু জেএস গ্রাহক নির্বাচিত নিবন্ধকে জানে, এটি পাসওয়ার্ড ক্ষেত্রগুলি প্রদর্শন করে, তাই এর মুখোমুখি, দেখে মনে হচ্ছে আপনি নিবন্ধভুক্ত করছেন। তবে যতক্ষণ পিএইচপি পক্ষের সাথে সম্পর্কিত, এটি অতিথি চেকআউট, যাতে চেকআউটটি সম্পূর্ণ হয়ে গেলে এটি গ্রাহক তৈরি করে না।

সম্পাদনা করুন: সরলতম সমাধানটি সেভমেথোডএকশন থেকে এই তিনটি লাইন মন্তব্য করা। আরও সঠিক / জটিল সমাধানটি হ'ল setMethodপৃষ্ঠা থেকে ফর্ম_কিটি ধরে নেওয়া এবং এজেএক্স অনুরোধের মাধ্যমে প্রেরণ করা উচিত।


আমরা দয়া করে যে পথটি পেতে পারি তা দয়া করে আমাদের সরবরাহ করতে পারেন: এটি-> isFormkeyValidationOnCheckoutEn सक्षम () && $ এই -> _ বৈধ ফর্মকি
আইকন

স্কিন / ফ্রন্টএন্ড / বেস / ডিফল্ট / জেএস / অপচেকআউট.জেএসসে এই ফাংশনটি নেই।
আইকন

2
ফর্ম_কি চেক করা কোড স্নিপেট থেকে এসেছে app/code/core/Mage/Checkout/controllers/OnepageController.php। জেএস দ্বারা অনুরোধটি ফর্ম_কি না প্রেরণের কারণে এটি ঘটে। এটি প্যাচ সহ একটি বাগ। আমি সন্দেহ করি সেখানে একটি ভি 2 থাকতে হবে।
পিটার ও'ক্লালাহান

2
অথবা প্যাচ ভি 2 অবধি, কেবল সিস্টেম / কনফিগারেশন / অ্যাডমিন -> সুরক্ষা -> "চেকআউটে ফর্ম কী বৈধকরণ সক্ষম করুন" সেটিংস 0 এ অক্ষম করুন এটি নোটিশ এনেছে, তবে প্যাচ ভি 2 এর পরে আমরা এটিকে আবার সক্ষম করতে পারি
জেরোইন

1
পিটার কিছুটা গভীর খননের জন্য ধন্যবাদ। আশা করি ম্যাজেন্টো থেকে কেউ এটি বাছাই করবে বা বাগ রিপোর্টটি লক্ষ্য করবে এবং আমরা একটি ভি 2 পেয়ে যাব।
রিকিমেজ 123

3

সম্পূর্ণ ক্রেডিট সমাধানের জন্য পিটারের কাছে যায়! কী পরিবর্তন হবে তা আমি ধাপে ধাপে নির্দেশটি নির্দেশ করতে চাই।

যান অ্যাপ্লিকেশন / কোড / কোর / পুরোনো যাদুকর / চেকআউট / কন্ট্রোলার / OnepageController.php

অবস্থান নির্ণয় করুন:

 public function saveMethodAction()
{
    if ($this->_expireAjax()) {
        return;
    }

    if ($this->isFormkeyValidationOnCheckoutEnabled() && !$this->_validateFormKey()) {
        return;
    }

/ * * / ট্যাগ সহ লাইনটি মন্তব্য করুন।

 public function saveMethodAction()
{
    if ($this->_expireAjax()) {
        return;
    }

    /*if ($this->isFormkeyValidationOnCheckoutEnabled() && !$this->_validateFormKey()) {
        return;
    }*/

2
এটি ভুল, আপনি কোন প্যাচ যুক্ত করেছেন তা মন্তব্য করছেন। যতদূর আমি এই প্যাচ সম্পর্কে অবগত রয়েছি, form keyপরিবর্তে js অনুরোধটি প্রেরণ করা উচিত । আমাদের এই দোষটি (প্যাচ) ম্যাজেন্টো কোর দলকে জানানো উচিত।
আদর্শ খত্রি

@ আদর্শখাত্রী এটি ভুল হতে পারে তবে এটি কার্যকর! এবং হ্যাঁ, ম্যাজেন্টো টিমকে এখনই সচেতন হওয়া উচিত। আপনি যদি পারেন তবে তাদের ডাবল বার্তা দিন।
আইকন

2
@ আদর্শখাত্রী আমি আপনার সাথে একমত এই 2 টি লাইন মন্তব্য করা সমস্যা সরিয়ে দেয়, তবে প্যাচ লক্ষ্যটিও সরিয়ে দেয়। আমি একই সমস্যা পেয়েছি এবং মুহুর্তের জন্য কীভাবে এটি ঠিক করা যায় তা বুঝতে পারি না ...
DarkCowboy

মন্তব্য করার পরিবর্তে isFormkeyValidationOnCheckoutEnabled()আপনি কেবল অ্যাডমিনের সেটিংটি অক্ষম করতে পারবেন তবে সবচেয়ে ভাল সমাধানটি হল রাফেলস: magento.stackexchange.com/a/177125/2671
ড্যানকার্লায়ন

@ ড্যানকার্লিয়ন রাফেল যা করেছে তা দুর্দান্ত কাজ। আমি কেবল পিটারের দ্বারা প্রস্তাবিত স্বল্প-মেয়াদী ফিক্সের নির্দেশনা দিয়েছিলাম, ম্যাগেন্টো স্বীকার করেছে যে সমস্যা আছে days আমি সম্মত একটি আদর্শ সমাধান নয় বরং ব্যাক-এন্ড থেকে ফর্ম-কীগুলি অক্ষম করার মতো একটি সমাধান fix
আইকন

1

শুরু করার জন্য একটি ভাল পয়েন্ট:

সুরক্ষা প্যাচ SUPEE-9767 - সম্ভাব্য সমস্যা?

আপনার টেম্পলেট ফাইলগুলি আপডেট করতে হবে। দয়া করে মনে রাখবেন এই প্যাচটি প্রকাশের কয়েক ঘন্টা অবধি আছে এবং এই মুহুর্তের জন্য আমাদের প্রকাশ্যে যা আছে তা মোকাবেলা করতে হবে। আমি পরের দিনগুলিতে বিষয়গুলি স্পষ্ট হয়ে উঠবে তা নিশ্চিত।

সম্পাদনা: ভোট দেওয়ার জন্য ধন্যবাদ! আমি দুঃখিত আমি এই প্যাচটি প্রকাশের 8 ঘন্টার মধ্যে কোনও সমাধান দিতে পারি না।


3
হ্যাঁ, আমি ইনস্টলেশনের সমস্ত টেম্পলেট ফাইল দিয়েছি যেখানে আমি সমস্যাটি চিহ্নিত করেছি। আমি উপরের প্রশ্নটি আপডেট করেছি - ম্যাজেন্টো ১.৯.৩.৩ এর পরীক্ষামূলক ভ্যানিলা ইনস্টলেশনে কোনও পরিবর্তন ছাড়াই আমার মনে হচ্ছে যে একই সমস্যা হচ্ছে। পরীক্ষার ১.৯.২.৪ ইনস্টলেশনটি ডিফল্ট (তাজা, অবিবর্তিত) প্যাকেজ / থিমটিও ব্যবহার করছিল।
রিকিমেজ 123

আমি 1.7.0.2 এবং একই জিনিস দিয়ে চেষ্টা করেছি, ফর্ম কীগুলি সক্ষম করা থাকলে গ্রাহকরা কখনই নিবন্ধভুক্ত হন না।
আইকন

1
আমি 1.9.2.4 এর সাথে 1.9.3.3 এর তুলনা করে কিছু তদন্ত করব এবং দেখছি পার্থক্যগুলি কী। আমি স্ক্র্যাচ 1.9.3.3 থেকে এখনও ইনস্টল করি নি did আমি উপরের উল্লিখিত লিঙ্কে প্রতিবেদনটি পোস্ট করব।
ADDISON74

2
আমি সমস্যাটি খুঁজে পেলে আপডেট করব; এটি ম্যাজেন্টো-তে একটি বাগ রিপোর্ট উত্থাপন করেছে কারণ এটি মনে হচ্ছে যে কোনও অশোধিত 1.9.3.3 ইনস্টল করার ক্ষেত্রে সমস্যা।
রিকিমেজ 123

1
ম্যাজেন্টোতে থাকা সেই বাগ ট্র্যাকারটি রিপোর্ট করার উপায় নয়, এটি অকেজো। আমি বহু বছর আগে এটি দিয়েছিলাম, সমাধান দিয়েছি, এবং কোডটিতে কোনও কিছুই পরিবর্তন করা হয়নি। সেখানে কেউ শুনছেন না, তবে তারা ম্যাজেন্টো 2-তে শুনছেন! সর্বদা আমি ম্যাজেন্টো ওয়েবসাইট বাদে অন্য জায়গায় সমাধান পেয়েছি। আমার পরামর্শ হ'ল আপনার প্রোডাকশন ওয়েবসাইটগুলি আপডেট করার আগে কিছু পরীক্ষা করা। আমি মনে করি যে নতুন সমস্যাগুলির সাথে আমরা আমাদের ভাবনার চেয়ে শীঘ্রই একটি নতুন আপডেট দেখতে পাব। একই জিনিসটি ঘটেছিল 1.9.3.0 থেকে 1.9.3.1 এর মধ্যে।
ADDISON74

1

ডিজিটাল পিয়ানিজমে প্যাচ @ রাফেলটির জন্য ধন্যবাদ।

সুবিধার জন্য, আমি একটি পৃথক তৈরি করেছি যাতে আপনি প্যাচটি দ্রুত প্রয়োগ করতে পারেন।

 skin/frontend/base/default/js/opcheckout.js | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/skin/frontend/base/default/js/opcheckout.js b/skin/frontend/base/default/js/opcheckout.js
index 8935793af..9ccbe61a9 100644
--- a/skin/frontend/base/default/js/opcheckout.js
+++ b/skin/frontend/base/default/js/opcheckout.js
@@ -165,20 +165,21 @@ Checkout.prototype = {
     },

     setMethod: function(){
+        var formKey = $('checkout-step-login').select('[name=form_key]')[0].value;
         if ($('login:guest') && $('login:guest').checked) {
             this.method = 'guest';
-            var request = new Ajax.Request(
+            new Ajax.Request(
                 this.saveMethodUrl,
-                {method: 'post', onFailure: this.ajaxFailure.bind(this), parameters: {method:'guest'}}
+                {method: 'post', onFailure: this.ajaxFailure.bind(this), parameters: {method:'guest', form_key:formKey}}
             );
             Element.hide('register-customer-password');
             this.gotoSection('billing', true);
         }
         else if($('login:register') && ($('login:register').checked || $('login:register').type == 'hidden')) {
             this.method = 'register';
-            var request = new Ajax.Request(
+            new Ajax.Request(
                 this.saveMethodUrl,
-                {method: 'post', onFailure: this.ajaxFailure.bind(this), parameters: {method:'register'}}
+                {method: 'post', onFailure: this.ajaxFailure.bind(this), parameters: {method:'register', form_key:formKey}}
             );
             Element.show('register-customer-password');
             this.gotoSection('billing', true);

1

SUPEE-9767 প্যাচের সংস্করণ 2 আজ এর আগে ম্যাজেন্টো সিই 1.9.3.4 সহ প্রকাশিত হয়েছিল । ভি 2 এই চেকআউট রেজিস্ট্রেশন বাগ সহ বেশ কয়েকটি সমস্যা সমাধান করে।

আপনি সর্বশেষতম সংস্করণে (1.9.3.4) আপগ্রেড করতে পারেন, বা ভি 1 রিভার্ট করুন এবং তারপরে প্যাচের ভি 2 প্রয়োগ করতে পারেন। যে কোনও বিকল্প সমস্যার সমাধান করবে।

ভি 2-তে সরকারী পরিবর্তন কার্যকরভাবে পিটার ও'ক্যালাহান বর্ণিত, একইভাবে যুক্ত হওয়া তিনটি লাইন মুছে ফেলে Mage_Checkout_OnepageController::saveMethodAction

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.