Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 05 июл 2025, 00:14

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: модуль Auth
СообщениеДобавлено: 19 окт 2012, 01:00 
Не в сети
Новичок

Зарегистрирован: 19 окт 2012, 00:47
Сообщения: 10
Вопрос больше о применении данного модуля.
С чем столкнулся - по видеоуроку сделана логинизация на сайт(готовый код с видеоуроком)
результат - не могу залогиниться.

Копаясь и дебажа наткнулся на причину - логин и пароль не проходят стандартную валидацию в кохане 3.2.2
а именно
в правилах (rules) в модели Model_Auth_User(orm modelu)
array(array($this, 'unique'), array('username', ':value')),
что естественно - я не могу вводить уникальный логин, яже логинясь на сайт уже присутсвую в базе.

вот и вопрос, толи я чтото не так делаю толи что.
код который пропускал в админку.

Код:
if ($_POST) {
            $user = ORM::factory('user');
            $post = $user->validate_login($_POST);
           
            if ($post->check()) { //ну и сюда мы никак не попадает - при попытке зайти на сайт, логин естественно не уникален.


я понял как добиться работы, но мне не понятно, почему по умолчанию при логине, проверяеться его уникальность?

ниже функция модели, валидация логина.
Код:
public function validate_login(& $array){
        $array = Validation::factory($array)
                ->label('username', 'Логин')
                ->label('password', 'Пароль')
//                ->rules(TRUE, array('trim' => NULL, 'htmlspecialchars' => NULL))
                ->rules(TRUE, array(array('trim'), array('htmlspecialchars')))
                ->rules('username', $this->_rules['username'])
                ->rules('password', $this->_rules['password']);

        return $array;


Последний раз редактировалось Sergey 19 окт 2012, 01:29, всего редактировалось 1 раз.
Обернул исходники в [code]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: модуль Auth
СообщениеДобавлено: 19 окт 2012, 01:38 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Эммм... Кагбэ в ORM уже есть нужный в данной ситуации метод:
Код:
   /**
    * Checks whether a column value is unique.
    * Excludes itself if loaded.
    *
    * @param   string   $field  the field to check for uniqueness
    * @param   mixed    $value  the value to check for uniqueness
    * @return  bool     whteher the value is unique
    */
   public function unique($field, $value)
   {
      $model = ORM::factory($this->object_name())
         ->where($field, '=', $value)
         ->find();

      if ($this->loaded())
      {
         return ( ! ($model->loaded() AND $model->pk() != $this->pk()));
      }

      return ( ! $model->loaded());
   }


Вам не нужно изобретать колесо. Просто используйте следующий способ:
Код:
/**
   * Rules for the user model. Because the password is _always_ a hash
   * when it's set,you need to run an additional not_empty rule in your controller
   * to make sure you didn't hash an empty string. The password rules
   * should be enforced outside the model or with a model helper method.
   *
   * @return array Rules
   */
  public function rules()
  {
    return array(
      'username' => array(
        array('not_empty'),
        array('alpha_dash', array(':value', TRUE)),
        array('min_length', array(':value', 3)),
        array('max_length', array(':value', 32)),
        array(array($this, 'unique'), array('username', ':value')),
      ),
      'email' => array(
        array('not_empty'),
        array('email'),
        array('email_domain'),
        array(array($this, 'unique'), array('email', ':value')),
      ),
    );
  }


Как то так..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: модуль Auth
СообщениеДобавлено: 13 ноя 2012, 16:53 
Не в сети
Новичок

Зарегистрирован: 19 окт 2012, 00:47
Сообщения: 10
Sergey писал(а):
Эммм... Кагбэ в ORM уже есть нужный в данной ситуации метод:
Код:
   /**
    * Checks whether a column value is unique.
    * Excludes itself if loaded.
    *
    * @param   string   $field  the field to check for uniqueness
    * @param   mixed    $value  the value to check for uniqueness
    * @return  bool     whteher the value is unique
    */
   public function unique($field, $value)
   {
      $model = ORM::factory($this->object_name())
         ->where($field, '=', $value)
         ->find();

      if ($this->loaded())
      {
         return ( ! ($model->loaded() AND $model->pk() != $this->pk()));
      }

      return ( ! $model->loaded());
   }


Вам не нужно изобретать колесо.

Как то так..


Гы гы...что прикольное, что я всетаки изобрёл колесо!!! код моей функции

Код:
return !$user->loaded() || ( $this->pk()==$user->pk());

тоже что и в оригинале, только НЕ вынесенно за скобки в оригинале, а у меня внесено в скобки.
но потом я нашол и метод юник.(зы - устал ждать ответа, и пошол рыть сам) Но всёравно спасибо за помощь хороший человек.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group