Jump to content

Ajax w backoffice


Martin-WulkSoft

Recommended Posts

Testuje ajax-a i o ile we froncie wszystko działa, to po wywołaniu pliku z backoffice nic się nie dzieje, a w konsoli przeglądarki otrzymuje komunikat 302 Moved - do strony głównej

 

Po usunięciu dwóch pierwszych linijek (includów) w ajax.php wszystko działa ,ale wtedy z kolei nie mogę dostać się do metod danych klas. 

 
Czy można jakoś to obejść ? 

 

ajax.php

require_once(dirname(__FILE__).'../../../config/config.inc.php');
require_once(dirname(__FILE__).'../../../init.php');


switch (Tools::getValue('method')) {
  case 'myMethod' :
    die( Tools::jsonEncode( array('result'=>'my_value')));
    break;
  default:
    exit;
}
exit;

 

Link to comment
Share on other sites

Plik ajaxa w katalogu /modules/mymodule/ajax.php wywołuje przez dodanie w getContent() pliku z JavaScriptem


public function getContent()
{
$this->context->controller->addJS(($this->_path).'js/admin.js');
	
$(document).ready(function() {
       $.ajax({
			
  type: 'GET',
  url: "/modules/mymodule/ajax.php",
  data: 'method=myMethod' ,
  dataType: 'json',
  success: function(json) {
    alert('ok')
  }
    });
    
    });

Jak dołączam ten sam plik do nagłówka strony głównej przez hookDisplayHeader() wszystko działa dostaje zwrócone dane i komunikat OK


Link to comment
Share on other sites

Wszystko działa poprawnie (jak podaje parametry ajax.php?method=myMethod otrzemuje zmienną) ale gdy chcę się odwołać z backoffica przez $.ajax dostaje komuniakt w konsoli chroma 

Remote Address:88.198.99.999:80
Request URL:http://mojastrona.pl/dddddd/modules/mymodule/ajax.php
Request Method:POST
Status Code:302 Moved
XMLHttpRequest cannot load http://www.mojastrona.pl/d1/index.php?. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://mojastrona.pl' is therefore not allowed access. index.php?controller=AdminModules&token=e3c6751b2fc42abe68939b91d665d3a3&configure=mymodule&tab_m…:1

Jak w pliku ajax.php  wprowadzę specjalnie błąd wtedy dostaje komunikat 200 OK  i w podglądzie widzę że php wyrzucił błąd. 

Link to comment
Share on other sites

 

 

XMLHttpRequest cannot load http://www.mojastrona.pl/d1/index.php?. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://mojastrona.pl' is therefore not allowed access. index.php?controller=AdminModules&token=e3c6751b2fc42abe68939b91d665d3a3&configure=mymodule&tab_m…:1

 

 

Czy "domena" z którą łączysz się do back office odpowiada domenie sklepu? 

Błędy acces-control-allow-origin w zapytaniach ajax związane z się kiedy próbujesz połączyć się z domeną B, będąc (wywołując zapytanie ajax) z domeny A

Link to comment
Share on other sites

Doamena sklepu to :  http://mojastrona.pl/developer/index.php

 

Domena zaplecza: http//:mojastrona.pl/developer/panel/index.php

 

Przed napisaniem posta szukałem w google i znalazłem tylko jednego posta z kodem, który działał ale też  nie miał dołączonych includów. Po dodaniu includów następowało przekierowanie   

require_once(dirname(__FILE__).'../../../config/config.inc.php');
require_once(dirname(__FILE__).'../../../init.php');

Czy znasz może jakiś darmowy moduł  z zapleczem ajaxa żeby podejrzeć jakieś rozwiązania ?  

Link to comment
Share on other sites

Przed chwilą testowałem  homeslider i przy zapisie kolejności slajdów wyskoczyło mi dokładnie takie samo przekierowanie 302 Moved jak przy moim pliku ajax.php i dane  kolejności slajdów nie zostały zapisane.

 

Muszę zainstalować PS w innej lokalizacji i zobaczyć co jest nie tak skoro wiem że to nie jest z winy kodu.

Link to comment
Share on other sites

ale zobacz, ja już powiedzialem co jest nie tak :P
 

 

 

XMLHttpRequest cannot load http://www.mojastrona.pl/d1/index.php?. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://mojastrona.pl' is therefore not allowed access. index.php?

 

łączysz się przez www kiedy Twoj sklep nie korzysta z www

traktuj to www jako subdomenę, co oznacza tyle, że będąc na domenie a próbujesz połączyć się z domeną b za pośrednictwem ajax

 

nie jest to możliwe!

Link to comment
Share on other sites

po prostu loguj się do back office za pośrednictwem poprawnej domeny, tj. 

 

  1. jeżeli Twój sklep korzysta z domeny www.SKLEP.com do backoffice loguj się za pośrednictwem www.SKLEP.com/admin/
  2. jeżeli Twój sklep korzysta z domeny bez www, tj. sklep.com do backoffice loguj się za pośrednictwem sklep.com/admin/

problem który poruszyłeś nie jest do rozwiązania - bo to zabezpieczenia przeglądarek przez możliwymi "hackami".

 

o co chodzi?

Kod zapytania ajax to javascript, możesz z łatwością zmienić domenę zapytania ajax, co oznacza tyle, że możesz pobrać dane z jakiejś innej strony (!). Wyobraźmy sobie, że skrypt wykonuje zapytanie ajax do jakiegoś pliku na Twojej domenie, wynik tego zapytania przekazuje dalej i zapisuje w bazie danych. Teraz ingerujemy w skrypt, zmieniamy adres zapytania ajax na swój plik na innej domenie, przekazujemy jakieś "lewe" dane i robimy sraczkę w bazie danych.

 

no i właśnie ten cały "access origin" to zabezpieczenie przed takimi hackami.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...