Moim celem jest posiadanie unikalnej soli dla każdego użytkownika, a nie tylko używanie Configure::read('Security.salt')
dla każdego użytkownika.CakePHP 2: Nadpisanie metody "hasła" AuthComponent
Wiem, że CakePHP 2.x nie powoduje już automatycznego haszowania haseł. To pozwala mi wykonywać walidację modelu na hasłach, co jest bardzo miłe. Jednak nie widzę sposobu, aby przesłonić metodę "password" AuthComponent. Więc nawet jeśli mogę kontrolować, jak hasła są mieszane przed ich zapisaniem w bazie danych, nie mogę kontrolować, jak hasła są mieszane podczas wykonywania rzeczywistego logowania. Z książki kucharskiej:
Nie trzeba hash hasła przed wywołaniem
$this->Auth->login()
.
Co mogę zrobić, aby $this->Auth->login()
użyć niestandardowej metody haszowania hasła?
Dzięki.
AKTUALIZACJA: Skończyłem z odpowiedzią dr Hannibal Lecter (tworzenie niestandardowego obiektu uwierzytelniania). Oto jak to zrobić:
Stary kod:
$this->Auth->authenticate = array('Form' => array('fields' => array('username' => 'email')));
Nowy kod (zmiana "Form" do "klienta"):
$this->Auth->authenticate = array('Custom' => array('fields' => array('username' => 'email')));
Utwórz „app/Controller/Component/Auth/CustomAuthenticate.php "i sprawiają, że wygląda tak:
<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');
class CustomAuthenticate extends FormAuthenticate {
}
Skopiuj "_findUser" i "_password" metody z" lib/ciasto/Controller/Com ponent/Auth/BaseAuthenticate.php "i wklej je do klasy" CustomAuthenticate ". Następnie zrób dwa następujące modyfikacje "_findUser" metody:
usunąć tę linię od "warunków $" tablicy:
$model . '.' . $fields['password'] => $this->_password($password),
Zmień
if (empty($result) || empty($result[$model])) {
doif (empty($result) || empty($result[$model]) || $result[$model][$fields['password']] != $this->_password($password, $result[$model]['id'])) {
następnie dokonać następujące dwie modyfikacje metody "_password":
Tworzenie parametru „$ id” zmieniając
protected function _password($password) {
doprotected function _password($password, $id) {
zaktualizować wartość soli zmieniając
return Security::hash($password, null, true);
doreturn Security::hash($password, null, Configure::read('Security.salt') . $id);
Wreszcie, należy zaktualizować wszystkie wystąpienia AuthComponent::password
używać Security::hash
z tą samą logiką, jak powyżej.
To zadziałało! Zaktualizowałem swoje pytanie za pomocą odpowiedniego kodu. Dzięki! – Nick