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

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 20 апр 2024, 10:20

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




Начать новую тему Ответить на тему  [ Сообщений: 64 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
Автор Сообщение
 Заголовок сообщения: Re: Auth (ORM)
СообщениеДобавлено: 11 авг 2012, 06:13 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Что вы тут устроили? :)

Код:
 /**
   * Register a new user.
   *
   * @access public
   */
  public function action_signup()
  {
    if (isset($_POST) && Valid::not_empty($_POST))
    {
      // validate
      $post = Validation::factory($_POST)
        ->rule('username', 'not_empty')
        ->rule('username', 'alpha_dash', array(':value', TRUE))
        ->rule('username', 'min_length', array(':value', 3))
        ->rule('username', 'max_length', array(':value', 40))
        ->rule('email', 'email')
        ->rule('email', 'email_domain') // НА ЛОКАЛХОСТЕ ЭТО ЛУЧШЕ ОТКЛЮЧИТЬ
        ->rule('password', 'not_empty')
        ->rule('password', 'min_length', array(':value', 3))
        ->rule('password', 'max_length', array(':value', 64))
        ->rule('password_confirm', 'matches', array(':validation', 'password_confirm', 'password'));

      if ($post->check())
      {
        // save
        $model = ORM::factory('user');
        $model->values(array(
          'username' => HTML::entities(strip_tags($post['username'])),
          'email' => $post['email'],
          'password' => $post['password'],
          'password_confirm' => $post['password_confirm'],
        ));

        try
        {
          $model->save();
          // Grant user login role
          $model->add('roles', ORM::factory('role', array('name' => 'login')));
          $model->add('roles', ORM::factory('role', array('name' => 'client')));
          // Reset values so form is not sticky
          $_POST = array();
          // success login
          if ($this->_auth->login($post['username'], $post['password']))
          {
            if($this->_auth->logged_in('client'))
              // Redirect to first login user page
              $this->request->redirect(Route::get('user')->uri(array(
                                                     'controller'=>'user',
                                                     'action' => 'first_login',
                                                     'id' => $post['username']
              )));
              // Or as: $this->request->redirect('user');
          }
          else
          {
            // Error athorization
            $this->template->styles['public/css/error.css'] = 'screen, projection';
            // Set errors using custom messages
            $this->errors[] = 'Ошибка автризации!';
          }
        }
        catch (ORM_Validation_Exception $e)
        {
          $this->template->styles['public/css/error.css'] = 'screen, projection';

          // Set errors using custom messages
          $this->errors = $e->errors('models');
         
          //echo Debug::vars($this->errors);
        }
      }
      else
      {
        // TODO: Error
      }
    }

    $view = 'sign/' . $this->request->action();
    $content = View::factory($view)
             ->bind('errors', $this->errors);
    $this->template->title = 'Регистрация';
    $this->template->styles['public/css/signup.css'] = 'screen, projection';
    $this->template->content = $content;
  }


Только $this->_auth где нибудь а абстрактном классе, в before() определите.
Что нибудь наподобие этого:

Код:
  /**
   * Stores the Auth instanse.
   *
   * @var Auth
   */
  protected $_auth;

  /**
   * The before() method is called before controller action.
   * In our template controller we override this method so that we can
   * set up default values. These variables are then available to our
   * controllers if they need to be modified.
   *
   * @access  public
   */
  public function before()
  {
    $this->_auth = Auth::instance();
    parent::before();
  }


Потом к текущему пользователю можно обращаться как угодно.
Хоть так:
Код:
$this->_auth->get_user()->username

Хоть так:
Код:
$this->_auth->get_user()->id

Или как угодно.

Но поучительнее будет взглянуть на:
Код:
echo Debug::vars($this->_auth->get_user());


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Auth (ORM)
СообщениеДобавлено: 11 авг 2012, 06:22 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
demyan112rv писал(а):
Добрый день! Реализую вход в админку.

Код:
class Controller_Admin_Admauth extends Controller_Admin {

   public function action_index() {
        $this->action_login();
    }




Очень умно


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Auth (ORM)
СообщениеДобавлено: 13 авг 2012, 15:28 
Не в сети
Новичок

Зарегистрирован: 08 авг 2012, 21:14
Сообщения: 19
2Sergey, сделал, как вы написали:
Код:
if ($post->check())
            {
                $model = ORM::factory('user');
                $model->values(array(
                    'username' => HTML::entities(strip_tags($post['username'])),
                    'email' => $post['email'],
                    'password' => $post['password']
                ));
               
                try
                {
                    $model->save();
                   
                    $model->add('roles', ORM::factory('role', array('name' => 'login')));
                    $model->add('roles', ORM::factory('role', array('name' => 'admin')));   
                }   
                catch (ORM_Validation_Exception $e)
                {
                    $errors1 = $e->errors('models');
                }
            }


но, тут же вываливается ошибка, ErrorException [ Fatal Error ]: Call to undefined method Kohana::config() прочитал, что необходимо заменить
Код:
$config = Kohana::config('database')->$name;

на
Код:
$config = Kohana::$config->load('database')->$name;

но тогда Kohana_Exception [ 0 ]: Invalid method unique called in Model_User
Код:
try
48                 {
49                     $model->save();
50                     
51                     $model->add('roles', ORM::factory('role', array('name' => 'login')));
52                     $model->add('roles', ORM::factory('role', array('name' => 'admin')));   
53                 }


я окончательно запутался :?


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

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
jr.lebedev писал(а):
2Sergey, сделал, как вы написали
но, тут же вываливается ошибка, ErrorException [ Fatal Error ]: Call to undefined method Kohana::config() прочитал, что необходимо заменить
Код:
$config = Kohana::config('database')->$name;

на
Код:
$config = Kohana::$config->load('database')->$name;



Я где то писал, что нужно пользоваться методами из Kohana 3.1 ? :)

jr.lebedev писал(а):
но тогда Kohana_Exception [ 0 ]: Invalid method unique called in Model_User
Код:
try
48                 {
49                     $model->save();
50                     
51                     $model->add('roles', ORM::factory('role', array('name' => 'login')));
52                     $model->add('roles', ORM::factory('role', array('name' => 'admin')));   
53                 }

я окончательно запутался :?


Вам же ясно написали
Цитата:
Invalid method unique called in Model_User

Вызывается неправильный (неизвестный) метод unique из модели User.
Он у вас там есть, метод этот? Если вы его не реализовали, тогда зачем используете проверку на уникальность (метод unique)?
Если реализовали метод unique в модели User, то возможно сделали это не правильно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Auth (ORM)
СообщениеДобавлено: 13 авг 2012, 19:28 
Не в сети
Новичок

Зарегистрирован: 08 авг 2012, 21:14
Сообщения: 19
Sergey писал(а):
Я где то писал, что нужно пользоваться методами из Kohana 3.1 ? :)

Ок, давайте по порядку, код, который вы написали выше для какой версии, 3.2.0? Я использовал ваш код, и никакой метод unique в нем не используется насколько я понимаю.


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

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
jr.lebedev писал(а):
Sergey писал(а):
Я использовал ваш код, и никакой метод unique в нем не используется насколько я понимаю.


Это не так.

Код:
<?php defined('SYSPATH') or die('No direct access allowed.');
/**
 * Default auth user
 *
 * @package    Kohana/Auth
 * @author     Kohana Team
 * @copyright  (c) 2007-2011 Kohana Team
 * @license    http://kohanaframework.org/license
 */
class Model_Auth_User extends ORM {

...
   /**
    * 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('max_length', array(':value', 32)),
            array(array($this, 'unique'), array('username', ':value')),
         ),
         'password' => array(
            array('not_empty'),
         ),
         'email' => array(
            array('not_empty'),
            array('email'),
            array(array($this, 'unique'), array('email', ':value')),
         ),
      );
   }
...


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

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Стоп, а покажите ка код модели :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Auth (ORM)
СообщениеДобавлено: 13 авг 2012, 20:23 
Не в сети
Новичок

Зарегистрирован: 08 авг 2012, 21:14
Сообщения: 19
интересно
Код:
public function rules()
   {
      return array(
         'username' => array(
            array('not_empty'),
            array('min_length', array(':value', 4)),
            array('max_length', array(':value', 32)),
            array('regex', array(':value', '/^[-\pL\pN_.]++$/uD')),
            array(array($this, 'username_available'), array(':validation', ':field')),
         ),
         'password' => array(
            array('not_empty'),
         ),
         'email' => array(
            array('not_empty'),
            array('min_length', array(':value', 4)),
            array('max_length', array(':value', 127)),
            array('email'),
            array(array($this, 'email_available'), array(':validation', ':field')),
         ),
      );
   }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Auth (ORM)
СообщениеДобавлено: 13 авг 2012, 23:44 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
jr.lebedev писал(а):
интересно
Код:
public function rules()
   {
      return array(
         'username' => array(
            array('not_empty'),
            array('min_length', array(':value', 4)),
            array('max_length', array(':value', 32)),
            array('regex', array(':value', '/^[-\pL\pN_.]++$/uD')),
            array(array($this, 'username_available'), array(':validation', ':field')),
         ),
         'password' => array(
            array('not_empty'),
         ),
         'email' => array(
            array('not_empty'),
            array('min_length', array(':value', 4)),
            array('max_length', array(':value', 127)),
            array('email'),
            array(array($this, 'email_available'), array(':validation', ':field')),
         ),
      );
   }


А! Так у вас не стандартная модель?
Вам нужна вот эта: /modules/orm/classes/model/auth/user.php. Можете положить сюда /application/classes/model/auth/user.php
Потом, если нужно будет, дополните.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Auth (ORM)
СообщениеДобавлено: 14 авг 2012, 17:19 
Не в сети
Новичок

Зарегистрирован: 08 авг 2012, 21:14
Сообщения: 19
Sergey спасибо огромное ;)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 64 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.

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


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

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


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

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