Загубена администраторска парола на sfGuard - Трябва да се нулира

Наследих проект на Symfony (по който всъщност работих преди известно време) и трябва да нулирам паролата, за да вляза в задната част.

Имам достъп до MySQL базата данни. Опитах да свържа солта и новата парола, след което да хеширам това с sha1 (алгоритъмът, който изглежда е вписан в DB), но без успех.

Може ли някой да предложи помощ за това как мога да променя паролата, без да влизам в уеб приложението?

Благодаря, Рич.


person Rich    schedule 12.12.2011    source източник


Отговори (2)


както можете да видите тук

вече има налична задача в sfGuardPlugin, която можете да стартирате в cli

./symfony guard:change-password your_username new_password
person Pascal    schedule 12.12.2011
comment
Това добавено ли е в скорошна версия на sfGuardPlugin? Не го виждам в този, който използвам, който беше пуснат през юли тази година. Благодаря за посоченото - person 0x6A75616E; 12.12.2011
comment
може би е наличен само във версията svn на плъгина и не е включен в zip/plugin, не знам, тъй като използвам само svn. - person Pascal; 12.12.2011
comment
Опитах се да добавя този файл (той също не съществуваше в моята версия), използвайки отговора на juand по-долу, но когато изпълнявам задачата на cli, получавам предупреждения (недефиниран индекс argv и array_shift() очаква параметър 1 да бъде array, null даден) от sfCommandManager - след това ми се дава списък с налични команди на symfony. - person Rich; 12.12.2011
comment
@Rich, каква версия на php използвате? - person 0x6A75616E; 12.12.2011
comment
@Rich, също така, какво пише в колоната с вашия алгоритъм в таблицата sf_guard_user? sha1 пише ли? - person 0x6A75616E; 12.12.2011
comment
Вярвам, че 5.2 работи на сървъра. Да, колоната с алгоритъма казва sha1 - чудя се дали има нещо "по-нередно" със сайта... - person Rich; 13.12.2011
comment
@Pascal предположи, че потребителят може да е неактивен. напр. is_active=false.. провери ли това @Rich? - person 0x6A75616E; 13.12.2011

Можете да го направите от код по-лесно..

$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() );

Използвам задача pake.

Създайте файл в project/lib/task и го наречете 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() );


    }

}

?>
person 0x6A75616E    schedule 12.12.2011
comment
Благодаря за това! Ще го пробвам. Дотогава всяка помощ с БД би била чудесна. - person Rich; 12.12.2011
comment
За да го промените от db, можете да дефинирате сол, да кажем 123 и да зададете солното поле с тази стойност, след което да изчислите стойността на sha1 от 123 плюс паролата, която искате.. напр. 123 парола. задайте стойността на паролата на това и вашата парола вече е парола - person 0x6A75616E; 12.12.2011
comment
Можете да използвате това за изчисляване на SHA1 стойности: hash.online-convert.com/sha1-generator - person 0x6A75616E; 12.12.2011
comment
Джуанд, това е, което вече опитах - все още не мога да вляза :( - person Rich; 12.12.2011
comment
@juand може би този потребител е неактивен (is_active = false) - person Pascal; 13.12.2011