是否可以通过客户端(客户)登录而不是密钥访问Prestashop的Web服务?

时间:2016-11-22 16:13:46

标签: javascript web-services react-native prestashop prestashop-1.6

我正在研究Prestashop的发展。我尝试使用react.js(更准确的React Native)创建一个“第三方”应用程序,并在prestashop的webservice中捕获Json数据。但我想让“客户”使用自己的帐户登录,只使用他的帐户登录。还有CRUD。

事先提前;非常感谢您的耐心和关注。

最诚挚的问候。

Michel Diz

3 个答案:

答案 0 :(得分:0)

Prestashop backoffice登录不允许访问webservices。必须启用Web服务并生成密钥。所以,我建议你改变你的"登录"办法。客户帐户与webservices无关,而webservices仅用于访问Prestashop存储的数据(更像是Backoffice而不是Frontoffice)。

你究竟需要做什么?

我希望它可以帮到你。

答案 1 :(得分:0)

我不知道你是否还在寻找解决方案,但实际上有办法。

请确认这是安全登录。

由于您可以访问所有prestashop数据,因此请确保登录非常安全。我已经能够使用PHP重新创建它。我认为通过一些新增功能,您可以按照自己的方式重新创建它。将其视为指南。

要使用prestashop webservice创建登录系统,您需要做三件事

通过webservice访问customers表 COOKIE_KEY,在app / config中定义 - > parameters.php ::' cookie_key' => ' 12321test&#39 ;; 一些与PHP的expierence 第一件事是从Web服务获取customers表。

// code placeholder
require_once('./../PSWebServiceLibrary.php');

/**
 * get information from PrestaShop
 */

$webService = new PrestaShopWebservice($url, $key, $debug);

$COOKIE_KEY = 'CookieKey';
$email = $_REQUEST['email'];
$password = $_REQUEST['password'];

$optUser = array(
    'resource' => 'customers',
    'filter[email]' => '[' . $email . ']',
    'display' => '[id,email,lastname,firstname,passwd]'
);

$resultUser = ($webService->get($optUser));

$json = json_encode($resultUser);

第二个也是最重要的是检查用户输入

// code placeholder

foreach ($resultUser->customers->customer as $info) {
    // Prestashop uses the cookie_key in combination with a salt key. To check the password use the php function: password_verify();
    $salt = substr($info->passwd, strrpos($info->passwd, ':') + 1, 2);
    $ZCpassword = md5($COOKIE_KEY . $password) . ':' . $salt;

    // Check if password comparison is true or false
    if (password_verify($password, $info->passwd) == true) {
        session_start();
        $response = array();
        $response['status'] = 'succes';
        $response['message'] = "You did it!";
        setcookie("userId", $info->id);
        header('Content-type: application/json');
        echo json_encode($response);
    } else {
        $response = array();
        $response['status'] = 'error';
        $response['message'] = 'Wrong password';
        header('Content-type: application/json');
        echo json_encode($response);
    }
}

这是如何将问题重现为一个工作示例。

希望这有帮助!

答案 2 :(得分:0)

对于仍在寻找此答案的人,

<?

if (isset($_GET["email"]) && isset($_GET["password"]) )
{
$email =  $_GET["email"];
$password = $_GET["password"];

$COOKIE_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';

$jsonurl = "https://XXXXXXXXXXXXXXXXXXXX@example.com/api/customers?filter[email]=".$email."&display=[passwd]&output_format=JSON";
$json = file_get_contents($jsonurl);
$json_a = json_decode($json, true);

$loopone = $json_a['customers'];
$looptwo = $loopone[0];
$loopthree = $looptwo['passwd'];

$ZCpassword = md5($COOKIE_KEY . $password);

if (strcmp($loopthree, $ZCpassword) == 0) {
        echo "sucess";
    } else {
         echo "fail";
    }

}
else
{
    echo "Send something with url dude";
}

?>