Я работаю в системе, которая использует CakePHP для веб-сайта.Я также разрабатываю приложения для Android, чтобы получить доступ к некоторым функциям на веб-сайте.Я хочу, чтобы система разделяла общий логин для CakePHP и моих приложений для Android.
У меня есть настройка входа в систему, работающая на веб-сайте, но я не могу войти в систему с помощью приложения для Android.Проблема, с которой я сталкиваюсь, заключается в том, как хешировать пароль, чтобы и CakePHP, и Android могли его прочитать.С моим приложением для Android я отправляю пароль API на сервер и, имея PHP-хэш, сравниваю его с паролем в базе данных.
Моя цель - создать единое место для имени пользователя и пароля длявеб-сайт и Android-приложения для доступа к логину.Я попробовал password_hash()
функцию в php, но хешированный пароль не позволяет мне войти в систему. Я бился над этой проблемой уже более недели.
Любая помощь будет принята с благодарностью.Спасибо, Трой Маркер
Ниже приведен список для моего API:
<?php
/* Phoenix Hospitality Software
*
* Android Application Program Interface V 1.0.1
* API Database Operation File
* Copyright (c) 2018 By Troy Marker Enterprises
*
* Based on code from Android MySQL Tutorial to Perform Basic CRUD Operation
* Copyright (c) 2015 By Belal Khan from Simplified Coding
* URL: https://www.simplifiedcoding.net/android-mysql-tutorial-to- perform-basic-crud-operation/
*
*/
/* Phoenix Hospitality Software Database Operation file */
class DbPhsOperation {
/* Class Variables */
private $con;
/* Class Constructor */
function __construct() {
require_once dirname(__FILE__) . '/DbConnect.php';
require_once '/includes/Cake/Auth/DefaultPasswordHasher.php';
$db = new DbConnect();
$this->con = $db->connect();
}
/** Logon function
*
* This function check for valid user credentials
*
* @param string $username - User requesting access
* @param string $password - User password
* @return $user[] - An array containing the users information
*
**/
function logon($username, $password1) {
$stmt = $this->con->prepare("SELECT id, username, password, grade, department FROM users WHERE username = ?");
//$hashedpassword = password_hash($password, PASSWORD_DEFAULT);
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->bind_result($id, $username, $password, $grade, $department);
$hasher = new DefaultPasswordHasher();
$hashedpassword = $hasher->hash($password1);
echo $username . '-' . $password1 . '-' . $password . '-' . password_hash($password, PASSWORD_DEFAULT);
if ($password == $hashedpassword) {
echo 'Password passed';
while($stmt->fetch()) {
$user = array();
$user['id'] = $id;
$user['username'] = $username;
$user['grade'] = $grade;
$user['department'] = $department;
array_push($users, $user);
}
return $user;
}
echo 'password failed';
return false;
}
}
Я также безуспешно использовал php-функции password_hash / password_verify.
В приложении CakePHP я использую хэш-пароль по умолчанию для хеширования пароля.