ব্যাকএন্ড থেকে সম্মুখভাগে অ্যাটোলজিন


15

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

  • গ্রাহক সত্তার জন্য একটি খালি বৈশিষ্ট্য যুক্ত করুন। (আসুন এটি কল করুন login_key)
  • গ্রাহক সম্পাদনা পৃষ্ঠায় ব্যাকএন্ডে একটি বোতাম যুক্ত করুন যা কোনও অ্যাডমিন পৃষ্ঠায় পুনঃনির্দেশ করে যেখানে বৈশিষ্ট্যটিতে একটি এলোমেলো স্ট্রিং উত্পন্ন এবং সংরক্ষণ করা হয় login_key
  • একই ক্রিয়ায় আমি প্রশাসককে এই জাতীয় একটি ফ্রন্টএন্ড url এ পুনঃনির্দেশ করি autologin/index/index/customer_id/7/login_key/ajkshdkjah123123(পূর্ববর্তী পদক্ষেপে উত্পন্ন মান)।
  • ফ্রন্টএন্ড ইউআরএলে, যদি গ্রাহক আইডি এবং login_keyনির্দিষ্ট গ্রাহকের সাথে মিলে যায় তবে আমি গ্রাহক অবজেক্টটি সেশনে সেট করেছি (লগ ইন হিসাবে) এবং মুছুন login_keyযাতে url ভবিষ্যতে কাজ করবে না।

এই seams কাজ। মানে আমি নির্বাচিত গ্রাহক হিসাবে লগ ইন হয়েছি এবং অটোলজিনের জন্য ব্যবহৃত লিঙ্কটি দ্বিতীয়বার কাজ করে না।
নীচের দিকটি হ'ল যদি 2 প্রশাসক একই সময়ে "অটোলজিন" বোতামে ক্লিক করেন তবে একজন লগইন করতে ব্যর্থ হবে, তবে এটি একটি গ্রহণযোগ্য ঝুঁকি।
আমার প্রধান উদ্বেগ হ'ল এটিও একটি (এটি নয়) বড় সুরক্ষা সমস্যা হতে পারে। এই পদ্ধতির সাথে কেউ কি কিছু ভুল দেখতে পাবে? বা একটি ভাল প্রস্তাব?
গ্রাহক অ্যাকাউন্টগুলি ওয়েবসাইটের দ্বারা পৃথক করা যায় এই বিষয়টি উপেক্ষা করুন। এটি গুরুত্বপূর্ণ নয় এবং এটি সহজেই পরিচালনা করা যায়।


নিয়মিত প্রশাসনিক ইউআরএল কীগুলি আপনাকে ঠিক ততটা সুরক্ষা দেয় না?
kalenjordan

@ ক্যালেনজর্ডান সমস্যা প্রশাসকের অংশ নয়। ঠিক আছে seams। আমার উদ্বেগ হ'ল অটোলজিনের জন্য সীমান্ত URL টি কল করার সময়। আমি সেখানে অ্যাডমিন ইউআরএল কীগুলি ব্যবহার করতে পারি না।
মারিয়াস

আহ ঠিক আছে, দুঃখিত। আপনি কি ম্যাজেন্টোকমার্স . com/magento-connect/login-as-customer-9893.html পরীক্ষা করে দেখেছেন ? এটি অ্যাডমিন দ্বারা লগইন প্রয়াসে অনন্য রেকর্ড তৈরি করে, গ্রাহক আইডির সাথে সম্পর্কিত একটি অনন্য হ্যাশ যা সীমান্ত নিয়ামকটিতে ব্যবহৃত হয়।
kalenjordan

@ ক্যালেনজর্ডান হা হা। আমি এই এক্সটেনশন সম্পর্কে জানতাম না। তবে আপনি যা বর্ণনা করেছেন তা থেকেই আমি প্রশ্নে বর্ণিত একই পদ্ধতি। :)। আমি এটি একবার দেখুন। ধন্যবাদ।
মারিয়াস

1
@ mageUz.True, তবে আমি যেমন বলেছিলাম, এটি একটি গ্রহণযোগ্য ঝুঁকি। আমি এখানে সুরক্ষার সাথে আরও উদ্বিগ্ন।
মারিয়াস

উত্তর:


9

যেহেতু কেউ আমার কাছে যা যা জিজ্ঞাসা করছিল তা না করার উপযুক্ত কারণ নিয়ে আসেনি আমি ধরে নিই যে আমার পদ্ধতিটি নিরাপদ। সুতরাং, এই প্রশ্নটি খোলা না রাখার জন্য, আমি কোডটিকে উত্তর হিসাবে যুক্ত করার এবং এটি স্বীকৃত হিসাবে চিহ্নিত করার সিদ্ধান্ত নিয়েছি।
সুতরাং Easylife_Simulateনিম্নলিখিত ফাইলগুলির সাথে আমার একটি নতুন এক্সটেনশান ডাকা হয়েছে : app/etc/modules/Easylife_Simulte.xml- ডিকোলেশন ফাইল:

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Simulate>
            <codePool>local</codePool>
            <active>true</active>
            <depends>
                <Mage_Customer />
            </depends>
        </Easylife_Simulate>
    </modules>
</config>

app/code/local/Easylife/Simulte/etc/config.xml - কনফিগারেশন ফাইল

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Simulate>
            <version>0.0.1</version>
        </Easylife_Simulate>
    </modules>
    <global>
        <helpers>
            <easylife_simulate>
                <class>Easylife_Simulate_Helper</class>
            </easylife_simulate>
        </helpers>
        <models>
            <easylife_simulate>
                <class>Easylife_Simulate_Model</class>
            </easylife_simulate>
        </models>
        <resources>
            <easylife_simulate_setup>
                <setup>
                    <module>Easylife_Simulate</module>
                    <class>Mage_Customer_Model_Resource_Setup</class>
                </setup>
            </easylife_simulate_setup>
        </resources>
    </global>
    <frontend>
        <routers>
            <easylife_simulate>
                <use>standard</use>
                <args>
                    <module>Easylife_Simulate</module>
                    <frontName>simulate</frontName>
                </args>
            </easylife_simulate>
        </routers>
    </frontend>
    <adminhtml>
        <events>
            <controller_action_layout_render_before_adminhtml_customer_edit>
                <observers>
                    <easylife_simulate>
                        <class>easylife_simulate/observer</class>
                        <method>addAutoLoginButton</method>
                    </easylife_simulate>
                </observers>
            </controller_action_layout_render_before_adminhtml_customer_edit>
        </events>
    </adminhtml>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <Easylife_Simulate before="Mage_Adminhtml">Easylife_Simulate_Adminhtml</Easylife_Simulate>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>

app/code/local/Easylife/Simulate/sql/easylife_simulate_setup/install-0.0.1.php - স্ক্রিপ্ট ইনস্টল করুন - একটি নতুন গ্রাহক বৈশিষ্ট্য যুক্ত করে:

<?php
$this->addAttribute('customer', 'login_key', array(
    'type'      => 'text',
    'label'     => 'Auto login key',
    'input'     => 'text',
    'position'  => 999,
    'required'  => false
));

app/code/local/Easylife/Simulate/Model/Observer.php - গ্রাহক অ্যাডমিন সম্পাদনা ফর্মটিতে একটি বোতাম যুক্ত করতে পর্যবেক্ষক

<?php
class Easylife_Simulate_Model_Observer extends Mage_ProductAlert_Model_Observer{
    public function addAutoLoginButton($observer){
        $block = Mage::app()->getLayout()->getBlock('customer_edit');
        if ($block){
            $customer = Mage::registry('current_customer');
            $block->addButton('login', array(
                'label'     => Mage::helper('customer')->__('Login as this customer'),
                'onclick'   => 'window.open(\''.Mage::helper('adminhtml')->getUrl('adminhtml/simulate/login', array('id'=>$customer->getId())).'\')',
            ), 100);
        }

    }
}

app/code/local/Easylife/Simulate/controllers/Adminhtml/SimulateController.php - অ্যাডমিন কন্ট্রোলার যা উপরের উত্পন্ন উত্পন্ন বাটনে ক্লিক করে।

<?php
class Easylife_Simulate_Adminhtml_SimulateController extends Mage_Adminhtml_Controller_Action{
    public function loginAction(){
        $id = $this->getRequest()->getParam('id');
        $customer = Mage::getModel('customer/customer')->load($id);
        if (!$customer->getId()){
            Mage::getSingleton('adminhtml/session')->addError(Mage::helper('easylife_simulate')->__('Customer does not exist'));
            $this->_redirectReferer();
        }
        else {
            $key = Mage::helper('core')->uniqHash();
            $customer->setLoginKey($key)->save();
            $this->_redirect('simulate/index/index', array('id'=>$customer->getId(), 'login_key'=>$key));
        }
    }
}

app/code/local/Easylife/Simulate/controllers/IndexController.php - অটোলজিন তৈরি করে এমন সীমানা নিয়ামক।

<?php
class Easylife_Simulate_IndexController extends Mage_Core_Controller_Front_Action{
    public function indexAction(){
        $id = $this->getRequest()->getParam('id');
        $key = $this->getRequest()->getParam('login_key');
        if (empty($key)){
            $this->_redirect('');
        }
        else{
            $customer = Mage::getModel('customer/customer')->load($id);
            if ($customer->getId() && $customer->getLoginKey() == $key){
                $customer->setLoginKey('')->save();
                Mage::getSingleton('customer/session')->setCustomerAsLoggedIn($customer);
                Mage::getSingleton('customer/session')->renewSession();
            }
            $this->_redirect('customer/account/index');
        }
    }
}

app/code/local/Easylife/Simulte/Helper/Data.php - মডিউল সহায়ক

<?php
class Easylife_Simulate_Helper_Data extends Mage_Core_Helper_Abstract{

}

এটাই. এটা আমার জন্য কাজ seams। আমি যেমন প্রশ্নে বলেছিলাম, খারাপ দিকটি হ'ল যদি 2 প্রশাসক একই সময়ে (প্রায়) একই গ্রাহকের জন্য লগইন বোতামটি টিপেন, তবে তাদের মধ্যে একটিও লগ ইন করতে পারবেন না But তবে তিনি কয়েক সেকেন্ড পরে প্রক্রিয়াটি পুনরাবৃত্তি করতে পারবেন।


একাধিক গ্রাহক থাকলে কী হবে?
মিলপ ইনক

@ গ্র্যাথহফ আমি আপনার প্রশ্নটি বুঝতে পারি না। আপনার পরিস্থিতি বর্ণনা করুন।
মারিয়াস

আমার মনে হয়, আমি যা করেছি তার পুরো দৃশ্যের পরিবর্তন করেছি হ'ল ব্যবহারকারীর নাম ইনপুট বাক্সটি সম্ভাব্য ব্যবহারকারীর নামের সাথে ড্রপ-ডাউনের সাথে প্রতিস্থাপন করুন এবং ব্যবহারকারী নাম ড্রপডাউন থেকে নির্বাচন করা হলে স্বয়ংক্রিয়ভাবে লগইন করুন। এটি আমার ইমপ্লিমেন্টেশন techworkslab.pixub.com/2014/01/script-for-auto-login
মিলোপল ইনক

@GarthHuff। স্ক্রিপ্টের জন্য ধন্যবাদ, তবে আমার সমস্যা অ্যাডমিন নয়, সামনের গ্রাহকদের সাথে সম্পর্কিত।
মারিউস

@ মারিয়াস আপনি কি এর ম্যাজেন্টো 2 সংস্করণ তৈরি করার পরিকল্পনা করছেন?
ড্যান

0

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

অতিরিক্তভাবে, লগইনঅ্যাকশন চলাকালীন, আমাদের কাস্টম যুক্তি এবং বৈধতার পরে, আমরা লগইন চলাকালীন কার্যকর হওয়া কোনও ইভেন্টের কার্যকারিতা হারিয়ে ফেলছি না তা নিশ্চিত করতে আমরা Mage_Customer_Model_Session :: setCustomerAsLoggedIn ব্যবহার করছি। আপনি যদি এই পদ্ধতিটি একবার দেখে থাকেন তবে আপনি খেয়াল করবেন এটি এটি অধিবেশনটিতে গ্রাহককে সেট করে পাশাপাশি গ্রাহক_লগিন ইভেন্ট প্রেরণ করে।

এখানে চিত্র বর্ণনা লিখুন

এই পদ্ধতির সাহায্যে আমরা একই গ্রাহক হিসাবে আমাদের বেছে নেওয়া উচিত হিসাবে আমরা একাধিক এজেন্ট লগ ইন করতে পারি (যদিও আমরা একই অ্যাকাউন্টে একই সময়ে কার্ট / অর্ডার স্থাপনের ক্ষেত্রে একাধিক এজেন্ট যুক্ত করতে চাই না)।

আমরা এখন দু'বছর ধরে এই সময়ে কোনও উল্লেখযোগ্য সমস্যা নিয়ে ব্যবহার করছি।


1
তথ্যের জন্য ধন্যবাদ। আমিও ব্যবহার setCustomerAsLoggedInআমার কোড মধ্যে, একই কারণে হিসাবে আপনি না। তবে আমি অটোলজিন ব্যবহারের পদ্ধতিটি সম্পর্কে আগ্রহী ছিলাম। (যদি এটি গোপন না হয়)।
মারিয়াস

আমরা এটি পরিচালনা করতে একটি কাস্টম মডিউল তৈরি করেছি যা মূল ফ্রন্টএন্ড লগইন কার্যকারিতা থেকে প্রসারিত।
অ্যান্টনি লিচ জুনিয়র

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