2011-12-12 6 views
3

Я унаследовал проект Symfony (который я действительно работал некоторое время назад) и вам нужно сбросить пароль для входа в фоновый код.Потерянный пароль администратора sfGuard - необходимо перезагрузить

У меня есть доступ к базе данных MySQL. Я попытался объединить соль и новый пароль, а затем хэшировать это с помощью sha1 (алгоритм, который, похоже, занесен в базу данных), но без везения.

Может ли кто-нибудь предложить какую-либо помощь в отношении того, как я могу изменить пароль без входа в веб-приложение?

Спасибо, богатый.

ответ

1

Вы можете сделать это из кода легко ..

$sf_guard_user = sfGuardUserPeer::retrieveByUsername('USERNAME_HERE'); 

if(is_null($sf_guard_user)){ 
    throw new \Exception('Could not find user'); 
} 

$sf_guard_user->setPassword($password); 
$sf_guard_user->save(); 

$this->logSection("Password change for user: ", $sf_guard_user->getUsername()); 

Я использую задачу пака.

Создайте файл в проекте/Lib/задачи и назвать его setUserPasswordTask.class.php (имя должно заканчиваться на "Task")

Класс будет выглядеть примерно так:

<?php 


class setClientPasswordTask extends sfBaseTask { 

    /** 
    * @see sfTask 
    */ 
    protected function configure() { 

     parent::configure(); 

     $this->addArguments(array(
      new sfCommandArgument('username', sfCommandArgument::REQUIRED, 'Username of the user to change', null), 
      new sfCommandArgument('password', sfCommandArgument::REQUIRED, 'Password to set', null) 
     )); 

     $this->addOptions(array(
      new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name', 'frontend'), 
      new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'prod'), 
      new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel'), 
     )); 


     $this->namespace = 'guard'; 

     $this->name = 'set-user-password'; 

     $this->briefDescription = 'Changes a User\'s password.'; 

     $this->detailedDescription = 'Changes a User\'s password.'; 
    } 



    /** 
    * @see sfTask 
    */ 
    protected function execute($arguments = array(), $options = array()) { 

     // initialize the database connection 
      $databaseManager = new sfDatabaseManager($this->configuration); 
      $connection = $databaseManager->getDatabase($options['connection'])->getConnection();  
      $configuration = ProjectConfiguration::getApplicationConfiguration($options['application'], $options['env'], true); 

      sfContext::createInstance($configuration); 


     // Change user password 

      $username   = $arguments['username']; 
      $password   = $arguments['password']; 


      $sf_guard_user = sfGuardUserPeer::retrieveByUsername('USERNAME_HERE'); 

      if(is_null($sf_guard_user)){ 
       throw new \Exception('Could not find user'); 
      } 

      $sf_guard_user->setPassword($password); 
      $sf_guard_user->save(); 

      $this->logSection("Password changed for user: ", $sf_guard_user->getUsername()); 


    } 

} 

?> 
+0

Спасибо за это! Я отдам его. До тех пор любая помощь с БД была бы большой. – Rich

+0

Чтобы изменить его из db, вы можете определить соль, например «123», и установить поле солей с этим значением, затем рассчитать значение sha1 123 плюс требуемый пароль. "123password". установите для этого пароля значение пароля и пароль «0» – SuitedSloth

+0

Вы можете использовать это для расчета значений SHA1: http://hash.online-convert.com/sha1-generator – SuitedSloth

7

, как вы можете увидеть here

есть задача уже доступна внутри sfGuardPlugin, что вы можете запустить кли

./symfony guard:change-password your_username new_password 
+0

Было ли это добавлено в недавней версии sfGuardPlugin? Я не вижу его в том, который я использую, который был выпущен в июле в этом году. Спасибо за указанный файл – SuitedSloth

+0

, возможно, он доступен только в версии svn плагина и не включен в zip/plugin, я не знаю, как использовать только svn. – Pascal

+0

Я пробовал добавить это файл (он также не существовал в моей версии), используя ответ juand ниже, но при запуске задачи в cli я получаю предупреждения (undefined index argv и array_shift() ожидает, что параметр 1 будет массивом, null задан) из sfCommandM anager. Затем мне предоставляется список доступных команд symfony. – Rich

Смежные вопросы