Хорошо, это как аутентифицировать пользователя Django из PHP или как «прочитать» пароль Django из PHP.
Я думаю, что OpenID - лучшее решение, но мне пришлось проверять подлинность пользователей Django в приложении PHP, использующем одну и ту же базу данных сегодня, и вот как я решил:
<?php
/* Generates crypted hash the same way as Django does */
function get_hexdigest($algorithm, $salt, $raw_password) {
if (!array_in($algorithm, array('md5', 'sha1'))) {
return false;
}
return $algorithm($salt.$raw_password);
}
/* Checks if password matches the same way Django does */
function check_password($raw_password, $django_password) {
list($algorithm, $salt, $hsh) = explode('$', $django_password);
return get_hexdigest($algoritm, $salt, $raw_password) === $hsh;
}
?>
Ключ к пониманию формата, в котором Django сохраняет пароли, а именно:
[Алгоритм] $ [соль] $ [хеш]
Так, например, у меня был пользователь «admin» с паролем «admin» и поле пароля в строке auth_user было:
sha1$63a11$85a93f217a72212b23fb0d5b95f3856db9575c1a
Алгоритм - "sha1", соль, которая была сгенерирована случайным образом, - "63a11", а зашифрованный хэш - "85a93f217a72212b23fb0d5b95f3856db9575c1a".
Так, кто вы производите зашифрованный хеш в PHP? Вы просто объединяете соль и необработанный пароль и хешируете его с помощью алгоритма, в данном случае sha1:
<?php
$salt = '63a11';
$pass = 'admin';
echo sha1($salt.$admin); // prints "85a93f217a72212b23fb0d5b95f3856db9575c1a"
?>
Это было не сложно! Я получил это, прочитав соответствующий код в источниках Django.