sfDoctrineGuard вопрос

Я пытаюсь сделать функцию «Я забыл свой пароль». Моя проблема в том, что если я попытаюсь выполнить запрос Doctrine и отправить пароль по электронной почте, он получит пароль в зашифрованном виде. Я смотрю на некоторые веб-сайты, в которых DoctrineGuard не имеет этой функции, а имеет только функции регистрации и входа в систему.

Это правда?

В этом случае, как я могу сделать функцию запоминания пароля?

Благодарность


person nebur85    schedule 26.04.2010    source источник


Ответы (3)


Пароль хэшируется, а затем сохраняется в базе данных, поэтому вы не сможете восстановить пароль после его сохранения.

Есть несколько способов создать функцию «Потерянный пароль»:

  • Отправьте новый пароль по электронной почте (не очень безопасно, но некоторым людям это все равно нравится)
  • Отправьте пользователю электронное письмо со ссылкой для сброса пароля (и уникальным токеном), которая либо дает пользователю новый пароль, либо позволяет пользователю ввести новый пароль.
person DuoSRX    schedule 26.04.2010
comment
Где вы говорите, что первый метод небезопасен? Во втором методе вы говорите... установите случайный пароль, отправьте его по ссылке, например.... user/reset/xdErDerfEFe, где xdErDerfEFe является токеном, и в этом действии выберите, где пароль = тот... и разрешите изменение после ? - person nebur85; 27.04.2010
comment
Первый метод менее безопасен, потому что, если, например, кто-то имеет доступ к почтовому ящику пользователя, он может увидеть свой новый пароль, тогда как при втором методе токен используется только один раз, а затем становится бесполезным после смены пароля. - person DuoSRX; 27.04.2010
comment
Я пытаюсь сделать что-то вроде... 1) Введите пароль, и если имя пользователя зарегистрировано, введите случайный пароль и выполните setpassword. 2) Он отправляет электронное письмо, например... «имя пользователя/пароль/xxxx», где xxx — сгенерированный пароль. 3) Если вы нажмете, попробуйте найти имя пользователя с этим паролем. Моя проблема в том, что пароль зашифрован, и я не могу найти настоящий зашифрованный пароль :( Вы меня понимаете? - person nebur85; 27.04.2010

Начиная с версии 5.0.0 отличный плагин sfDoctrineGuard-Plugin имеет встроенный модуль защиты от забытого пароля. Но в соответствующем ридми мало инфы как им пользоваться :))

[TODO: document the forgot password feature]

Чтобы использовать функцию забытого пароля, выполните следующие действия (при условии, что вы уже установили плагин и работает обычный вход):

  1. включите модуль в settings.yml (и включите i18n, когда он его использует):

    all:
      .setting:
      enabled_modules: [default, sfGuardAuth, sfGuardForgotPassword]
      i18n: true
    
  2. добавить маршруты в routing.yml (автоматическое добавление у меня не сработало). И убедитесь, что вы включили правило @homepage, которое используется для перенаправления.

    sf_guard_forgot_password_change:
      url:   /forgot_password/:unique_key
      class: sfDoctrineRoute
      options: { model: sfGuardForgotPassword, type: object }
      param: { module: sfGuardForgotPassword, action: change }
      requirements:
        sf_method: [get, post]
    
    sf_guard_forgot_password:
      url:   /forgot_password
      param: { module: sfGuardForgotPassword, action: index }
    
  3. включите рассылку в factories.yml (остерегайтесь различия для среды prod/dev.. См. также официальный документ.):

    all:
      mailer:
        class: sfMailer
        param:
        logging:           %SF_LOGGING_ENABLED%
        charset:           %SF_CHARSET%
        delivery_strategy: realtime
        transport:
          class: Swift_SmtpTransport
          param:
            host:       smtp.example.com
            port:       25
            encryption: ~
            username:   [email protected]
            password:   p4ssw0rd
    
  4. добавить адрес отправителя в app.yml (и маршрутизацию, которая у меня не работает автоматически). Адрес в app.yml и factory.yml должен совпадать, иначе smtp-сервер может выдать ошибку:

     all:
      sf_guard_plugin:
        routes_register: true
        default_from_email: [email protected]
    
  5. Коснитесь apps/your_app/modules/sfGuardForgotPassword/config/security.yml, чтобы сделать форму запроса доступной при выходе из системы:

    secure:
      is_secure: true      
    index:
      is_secure: false       
    change:
      is_secure: false
    
  6. очистить кеш с помощью ./symfony cc.

Теперь забудьте свой пароль.

person Tapper    schedule 30.03.2012
comment
Единственное, вместо apps/your_app/sfGuardForgotPassword/config/security.yml должно читаться apps/your_app/modules/sfGuardForgotPassword/config/security.yml - person jaudette; 01.03.2013

Если я правильно понял, у sfDoctrineGuard нет метода getPassword, который делал бы то, что ему нужно, чтобы... получить незашифрованный пароль.

Я использую первую рекомендацию DuoSRX: создать новый пароль, сохранить его с помощью $user->setPassword (который автоматически выполняет соление и хеширование) и отправить его пользователю по электронной почте. Затем пользователю предлагается войти в систему и создать новый пароль.

person Tom    schedule 26.04.2010