私は現在、prestashop webserviceを利用しているアプリケーションを開発中です。これは、私が構築しようとしているアプリケーションが、既存のprestashopアプリケーションの拡張であることを意味しています。両方のアプリケーション間の接続はprestashop webserviceprestashop webserviceを使用して顧客ログイン機能を作成する
です。現在、customers
のログインスクリプトを作成しようとしています。電子メールとパスワードは、Webサービスを介してデータベースから取得され、私は既存の行の入力をフィルタリングすることができます。だから[email protected]で記入してください。フィルタは、その電子メールアドレスを持つ行のみを取得します。
私が抱えている問題はパスワードです。 Prestashopは、パスワードを暗号化するためにmd5()
と一緒に_COOKIE_KEY_
を使用します。詳細については、このリンクを参照してください:link
私はしばらくの間、顧客のパスワードで入力されたパスワードをチェックしようとしていますが、私は解決策をまだ見つけていません。
以下のコードを見てみましょう:あなたは、私がpassword_verify
とmd5()
のようなものを試してきたが、私はかなりそれを取得することはできません見ることができるように
<?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にリダイレクトするときのトラブル。
いつもありがとうございます!
です: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