1

私は現在、prestashop webserviceを利用しているアプリケーションを開発中です。これは、私が構築しようとしているアプリケーションが、既存のprestashopアプリケーションの拡張であることを意味しています。両方のアプリケーション間の接続はprestashop webserviceprestashop webserviceを使用して顧客ログイン機能を作成する

です。現在、customersのログインスクリプトを作成しようとしています。電子メールとパスワードは、Webサービスを介してデータベースから取得され、私は既存の行の入力をフィルタリングすることができます。だから[email protected]で記入してください。フィルタは、その電子メールアドレスを持つ行のみを取得します。

私が抱えている問題はパスワードです。 Prestashopは、パスワードを暗号化するためにmd5()と一緒に_COOKIE_KEY_を使用します。詳細については、このリンクを参照してください:link

私はしばらくの間、顧客のパスワードで入力されたパスワードをチェックしようとしていますが、私は解決策をまだ見つけていません。

以下のコードを見てみましょう:あなたは、私がpassword_verifymd5()のようなものを試してきたが、私はかなりそれを取得することはできません見ることができるように

<?php 

require_once('./PSWebServiceLibrary.php'); 

/** 
* get information from PrestaShop 
*/ 

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

define('_COOKIE_KEY_', '...'); 
$email = "[email protected]"; 
define('password', "test"); 
$md5passwd = md5(_COOKIE_KEY_ . password); 

$opt = array(
    "resource" => "customers", 
    "display" => "[email , passwd]", 
    "filter[email]" => "$email" 
); 

$optPass = array(
    "resource" => "customers", 
    "display" => "[email]", 
    "filter[email]" => "$email", 
    "filter[passwd]" => "$md5passwd" 
); 

$jsonPass = ($webService->get($optPass)); 

//json encode it 
$jsonPasswd = json_encode($jsonPass); 

echo($jsonPasswd); 


if(password_verify($md5passwd, $jsonPasswd)) { 
    echo "password is valid"; 
} else { 
    echo "password is not valid"; 
} 

$jsonUrl = ($webService->get($opt)); 

//json encode it 
$json = json_encode($jsonUrl); 

echo($json); 

を。だから、これをやっている人や、prestashop webserviceで正しいログインスクリプトを作成する方法を知っている人はいますか?

更新 - 12/1/2017 私はいくつかの調査をした後、ユーザーの入力を確認する新しい方法を考え出しました。最初にコードが電子メールをチェックし、それが本当であればパスワードの入力を確認し続けます。しかし、私が抱えている問題は、パスワードとprestashopのパスワード暗号化です。私は2つのハッシュを一緒に比較することはできません。最初のハッシュはデータベースからのハッシュで、2番目のハッシュはユーザー入力パスワードです。入力には、prestashopの関数hash()が必要です。しかし、私はかなり前立腺の正しいハッシュシーケンスに到達することはできません。

私はこれをインターネット上で検索しましたが、プレstashopWebサービスを介してログインするための適切なソリューションを見つけることができませんでした。ログイン用に作成したスクリプトを以下に示します。

require_once('./PSWebServiceLibrary.php'); 

/** 
* get information from PrestaShop 
*/ 

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

$COOKIE_KEY = '_key'; 
$email = $_REQUEST['email']; 
$password = md5('_key' . $_REQUEST['password']); 

// The database hash for testing (random) 
$passwordString = '$2y$10$UsYrIFQUOr5LBUZBoqSdxODuhbToEc.2QEqfAVB1r\/fhO5EfOyO96'; 

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

$result = ($webService->get($opt)); 

$json = json_encode($result); 


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

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

$userResult = json_encode($resultUser); 

// Check the email 
function hasEmail($string, $email) 
{ 
    return strpos($string, $email) !== false; 
} 

// Check the Password 
function hasPassword($string, $password) 
{ 
    return strpos($string, $password) !== false; 
} 

if(hasEmail($userResult, $email) == true and hasPassword($userResult, $password) == true) { 
    session_start(); 
    $_SESSION['user'] = $email; 
    // redirect is kut. 
    echo 
     '<html> 
     <head> 
      <meta content="text/html; charset=utf-8"> 
     </head> 
     </html>'; 
} else { 
// Here, we use single quotes for PHP and double quotes for JavaScript 
    echo '<script type="text/javascript">'; 
    echo 'alert("Wrong username or password!")'; 
    echo '</script>'; 
} 

小2番目の質問:私は実行することができるだろうどのように - >成功文でURLに移動し、現在echo "<script></script>";が動作していないとheader()を使用することができないので、私がいるいくつかをsuccesにリダイレクトするときのトラブル。

いつもありがとうございます!

+0

です:https://www.prestashop.com/forums/topic/313908-webservice- web-login-via-a-webs /またはこのhttps://www.prestashop.com/forums/topic/586951-webservice-login-customer-prestashop-17/が助けになるかもしれません。また、classesフォルダのTools.phpクラスを見て、暗号化またはハッシュを検索してください。 – Aurora

答えて

1

は使用しています:

array('_COOKIE_KEY_', Tools::passwdGen(56)), 
array('_COOKIE_IV_', Tools::passwdGen(8)), 

クッキーのキーが異なるたびになるように。

//ENCRYPTS THE GIVEN PASSWORD IN ZEN-CART/OSCOMMERCE FORMAT 
$salt = substr($resultZC['password'], strrpos($resultZC['password'],':')+1, 2); 
$ZCpassword = md5($salt . $passwd) . ':' . $salt; 

:これは、あなたが求めている部分である

//CHECK IF THE GIVEN EMAIL MATCHES A ROW IN OUR LEGACY TABLE AND RETRIEVES THE LEGACY PASSWORD 
$resultZC = Db::getInstance()->getRow(' 
SELECT `password` 
FROM `zc_legacy_passwords` 
WHERE `email` = \''.pSQL($email).'\' 
AND `updated` = 0'); 

if (!$resultZC) 
return false; //<- EMAIL NOT FOUND IN NONE OF THE TABLES, SO IT IS AN INVALID LOGIN 

//ENCRYPTS THE GIVEN PASSWORD IN ZEN-CART/OSCOMMERCE FORMAT 
$salt = substr($resultZC['password'], strrpos($resultZC['password'],':')+1, 2); 
$ZCpassword = md5($salt . $passwd) . ':' . $salt; 

if ($ZCpassword != $resultZC['password']) 
return false; //<- WRONG ZEN-CART/OSCOMMERCE PASSWORD GIVEN 

:パスワードは、データベースから既存のパスワードを取得し、ユーザーが送信したパスワードと比較する必要があります良いかどうかを確認するために$ resultZC [ 'パスワード']は、データベースに格納されているパスワードであると、$ passwdをはたぶん、このパスワード

+0

のすべてであると推測します。=古いパスワードの暗号化を無効に設定する新しいアップデートがあります。パスワードの暗号化/復号化の新しいテクニックはsymfonyの暗号ですので、パスワード解読/比較の新しい方法を理解できない場合は質問を更新したり、新しい質問をします – Deathstorm

0

PrestaShopバージョンが1.6の場合、顧客パスワードを暗号化する機能はTools :: encrypt($ passwd)です。ですから、ハッシュを生成することができなければならない_COOKIE_KEY_を知っ

return md5(_COOKIE_KEY_.$passwd); 

:このメソッドは、単にこれを行います。 _COOKIER_KEY_はconfig/settings.inc.phpに定義されています

PrestaShopのバージョンが1.7の場合、ツールは使用されず、おそらくmd5(_COOKIE_KEY _。$ passwd)は一致しません。 symfonyの暗号を使用しています。

しかし、PrestaShop Webサービスにはユーザーを確認する何かが必要ですが、Customerクラスには1.6と1の両方で使用されるgetByEmail(...)メソッドがあります。7バージョン。

よろしくお願いいたします。クッキーキーPrestaShopのを生成する

+0

prestashopのバージョンは1.7(最新)です。以前の1.6バージョンのため、私はすでに 'return md5(_COOKIE_KEY _。$ passwd);'を試していました。期待通りに動作しませんでした。私は暗号についてあなたのアドバイスを見てみましょう! – Deathstorm

+0

こんにちは、私はPrestaShop 1.7.2.2とmd5(_COOKIE_KEY _。$ passwd)の自動ログイン作業をしてくれました。だから、パスワードのチェックに失敗するあなたのコードの別の理由を探し、多分何かがあります。 –

+0

md5関数で作成したタスクを表示して入力パスワードを確認できますか? – Deathstorm

関連する問題