Jump to content

Edit History

jayashanka

jayashanka

22 hours ago, ps8moduly.cz said:

Hi.

And have you considered using JavaScript and calling ajax functions?
In JavaScript, you can intercept the submit form call and send the text from the password field to your ajax file.

 

E.g.:

custom-javascript.js

$(document).ready(function() {
    /* register form */
    var isRegisterPage = $('#registration');
    var isRegisterForm = $('#customer-form');

    /* checkout form */
    var isCheckoutPage = $('#checkout');
    var isGuestForm = $('#checkout-guest-form');

    var okRegister = 0;

    if (isRegisterPage.length && isRegisterForm.length) {
        // OK, is register page
        okRegister = 1;
    }

    if (isCheckoutPage.length && isRegisterForm.length && isGuestForm.hasClass('active')) {
        // OK, is register page
        okRegister = 1;
    }

    // checkout register tab
    $('[href=#checkout-guest-form]').click(function () {
        okRegister = 1;
    });

    // checkout login tab
    $('[href=#checkout-login-form]').click(function () {
        okRegister = 0;
    });

    isRegisterForm.submit(function (e) {
        if (e.result == true && okRegister == 1) {
          var pwd = $('#field-password').val();
          var email = $('#field-email').val();
          afterPostSubmitForm(email, pwd);
        }
    });
});

function afterPostSubmitForm(email, pwd) {
    $.ajax({
        type: "POST",
        url: '/modules/my_module/ajax.php',
        data:'action=afterCreateAccount&email='+email+'&pwd='+pwd,
        success: function(data){
            if (data !== ''){
                // OK
            } 
        }
    });
}

 

ajax.php

// uncomment <?php
header("Access-Control-Allow-Origin: *");

include('../../config/config.inc.php');
include('../../init.php');

$module_name = 'my_module';

$token = pSQL(Tools::encrypt($module_name.'/ajax.php'));
$token_url = pSQL(Tools::getValue('token'));

$db = Db::getInstance();

$module = Module::getInstanceByName($module_name);
if ($token != $token_url || !Module::isInstalled($module_name)) {
    echo($module->l('AJAX error'));
}

if ($module->active && Tools::getValue('action') == 'afterCreateAccount' && Tools::getValue('email') && Tools::getValue('pwd')) {
    // OK, data exists
    $response = '';

    $email = Tools::getValue('email');
    $pwd = Tools::getValue('pwd') 
    
    // call function on my_module
    $response = $module->newRegisteredCustomer($email, $pwd);

    echo $response;
}

 

my-module.php

public function hookActionFrontControllerSetMedia($params)
{
    $pages = array('order', 'registration ');

    if (in_array($this->context->controller->php_self, $pages)) {
         $this->context->controller->addJs(_PS_MODULE_DIR_.$this->name.'/views/front/js/custom-javascript.js'); 
        $ajax = $this->context->shop->getBaseURL(true).'modules/'.$this->name.'/ajax.php?token='.Tools::encrypt($this->name.'/ajax.php'); 
        $jsDef = [
            'ajax_my_module' => $ajax,
        ];
        Media::addJsDef($jsDef);
    } 
}

/* my function called in ajax */
public function newRegisteredCustomer($email, $pwd)
{
    $db = Db::getInstance();

    $getCustomerByEmail = $db->getValue('SELECT id_customer FROM '._DB_PREFIX_.'customer WHERE email = '."'".$email."'");

    if ($getCustomerByEmail) {
        $customer = new Customer((int)$getCustomerByEmail);
        $plainPassword = $pwd;

        // your function call API
        $apiResponse = CustomAuthAPI::authenticateUser($customer);

        if ($apiResponse->success) {
            return true;
        } else {
            return false;
        }
            
    }
}

 

@ps8moduly.cz Thank you so much.  

 

What I really need to do is, I have a core system developed using wordpress and I'm developing the multi vendor system using prestashop. 

1. All the users in core system, should be able to login to prestashop multi vendor system using their existing username and password.

2. New customers who get register from prestashop multi vendor system, should be saved in core system and be able to login to core system as well. 

Something similar to SSO concept. 

 

Therefore in the CustomAuth API handles the user credentials communication part between core system and the prestashop multi vendor system. 

jayashanka

jayashanka

22 hours ago, ps8moduly.cz said:

Hi.

And have you considered using JavaScript and calling ajax functions?
In JavaScript, you can intercept the submit form call and send the text from the password field to your ajax file.

 

E.g.:

custom-javascript.js

$(document).ready(function() {
    /* register form */
    var isRegisterPage = $('#registration');
    var isRegisterForm = $('#customer-form');

    /* checkout form */
    var isCheckoutPage = $('#checkout');
    var isGuestForm = $('#checkout-guest-form');

    var okRegister = 0;

    if (isRegisterPage.length && isRegisterForm.length) {
        // OK, is register page
        okRegister = 1;
    }

    if (isCheckoutPage.length && isRegisterForm.length && isGuestForm.hasClass('active')) {
        // OK, is register page
        okRegister = 1;
    }

    // checkout register tab
    $('[href=#checkout-guest-form]').click(function () {
        okRegister = 1;
    });

    // checkout login tab
    $('[href=#checkout-login-form]').click(function () {
        okRegister = 0;
    });

    isRegisterForm.submit(function (e) {
        if (e.result == true && okRegister == 1) {
          var pwd = $('#field-password').val();
          var email = $('#field-email').val();
          afterPostSubmitForm(email, pwd);
        }
    });
});

function afterPostSubmitForm(email, pwd) {
    $.ajax({
        type: "POST",
        url: '/modules/my_module/ajax.php',
        data:'action=afterCreateAccount&email='+email+'&pwd='+pwd,
        success: function(data){
            if (data !== ''){
                // OK
            } 
        }
    });
}

 

ajax.php

// uncomment <?php
header("Access-Control-Allow-Origin: *");

include('../../config/config.inc.php');
include('../../init.php');

$module_name = 'my_module';

$token = pSQL(Tools::encrypt($module_name.'/ajax.php'));
$token_url = pSQL(Tools::getValue('token'));

$db = Db::getInstance();

$module = Module::getInstanceByName($module_name);
if ($token != $token_url || !Module::isInstalled($module_name)) {
    echo($module->l('AJAX error'));
}

if ($module->active && Tools::getValue('action') == 'afterCreateAccount' && Tools::getValue('email') && Tools::getValue('pwd')) {
    // OK, data exists
    $response = '';

    $email = Tools::getValue('email');
    $pwd = Tools::getValue('pwd') 
    
    // call function on my_module
    $response = $module->newRegisteredCustomer($email, $pwd);

    echo $response;
}

 

my-module.php

public function hookActionFrontControllerSetMedia($params)
{
    $pages = array('order', 'registration ');

    if (in_array($this->context->controller->php_self, $pages)) {
         $this->context->controller->addJs(_PS_MODULE_DIR_.$this->name.'/views/front/js/custom-javascript.js'); 
        $ajax = $this->context->shop->getBaseURL(true).'modules/'.$this->name.'/ajax.php?token='.Tools::encrypt($this->name.'/ajax.php'); 
        $jsDef = [
            'ajax_my_module' => $ajax,
        ];
        Media::addJsDef($jsDef);
    } 
}

/* my function called in ajax */
public function newRegisteredCustomer($email, $pwd)
{
    $db = Db::getInstance();

    $getCustomerByEmail = $db->getValue('SELECT id_customer FROM '._DB_PREFIX_.'customer WHERE email = '."'".$email."'");

    if ($getCustomerByEmail) {
        $customer = new Customer((int)$getCustomerByEmail);
        $plainPassword = $pwd;

        // your function call API
        $apiResponse = CustomAuthAPI::authenticateUser($customer);

        if ($apiResponse->success) {
            return true;
        } else {
            return false;
        }
            
    }
}

 

@ps8moduly.cz Thank you so much.  

 

What I really need to do is, I have a core system developed using wordpress and I'm developing the multi vendor system using prestashop. 

1. All the users in core system, should be able to login to prestashop multi vendor system using their existing username and password.

2. New customers who get register from prestashop multi vendor system, should be saved in core system as well. 

 

Therefore in the CustomAuth API handles the user credentials communication part between core system and the prestashop multi vendor system. 

×
×
  • Create New...