2015-04-21 2 views
-1

В моем проекте есть функция «забыть пароль». Когда пользователь забывает пароль, тогда электронное письмо должно отправляться на идентификатор пользователя с расшифрованным паролем. после того, как он войдет в систему, тогда должны быть выполнены функции входа в систему.Как кодировать и декодировать пароль в symfony2

Я использовал следующие энкодеры.

Secuirty.yml: 
    security: 
     encoders: 
      Coupon\EntityBundle\Entity\SupportUsers: 
       algorithm: sha1 
       encode_as_base64: false 
       iterations: 1 

    # encoders: 
    #  Coupon\EntityBundle\Entity\SupportUsers: plaintext 

     role_hierarchy: 
      ROLE_ADMIN:  ROLE_USER 
      ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

     providers: 
      main: 
       entity: 
        class: Coupon\EntityBundle\Entity\SupportUsers 
        property: supportUserUsername 

     firewalls: 
      dev: 
       pattern: ^/(_(profiler|wdt)|css|images|js)/ 
       security: false 

      login: 
       pattern: ^/login$ 
       security: false 

      coupon_login_forgot_password: 
       pattern: ^/forgot-password$ 
       security: false 

    #  coupon_report_categoryWiseCSV: 
    #   pattern: ^/report/csv-category$ 
    #   security: false 

    #  default_security_target: 
    #   pattern: ^/users/home$ 
    #   security: false 

      coupon_dashboard: 
       pattern: ^/ 
       form_login: 
        check_path: login_check 
        login_path: login 
        default_target_path: coupon_dashboard 
        always_use_default_target_path: true 
       logout: 
        path: logout 
        target: login 
       remember_me: 
        key: trex-kharadi6 
        lifetime: 43200 
        always_remember_me: false 
        remember_me_parameter: _remember_me 
        path: ~ 
        domain: ~ 
       #anonymous: ~ 
       #http_basic: 
       # realm: "Secured Demo Area" 

     access_control: 
      - { path: ^/coupon_dashboard, roles: ROLE_ADMIN } 
      - { path: ^/login, roles: IS_AUTHENTICATED_FULLY} 

Как написать собственные методы кодирования и декодирования и как их настроить.

Забыл пароль Действие: Здесь я получаю закодированный пароль из базы данных.

public function forgotPasswordAction(Request $request) { 
      $em = $this->getDoctrine()->getManager(); 
      $username = $request->get('username'); 
      $couponHelper = $this->get('coupon_helper'); 

      if ($request->isMethod('POST')) { 


       //echo $username; die; 
       if ($username == '') { 
        $this->get('session')->getFlashBag()->add('msg', $this->get('translator')->trans('forgot.pwd.enter')); 
       } else { 
        $user = $em->getRepository('CouponEntityBundle:SupportUsers')->findBy(array('supportUserUsername' => trim($username), 'supportUserStatus' => '0')); 
        if (count($user) != 0) { 
         $password = $user[0]->getSupportUserPassword(); 
         $email = $user[0]->getSupportUserEmail(); 
         if ($email != '') { 

          //emailer helper. 
          $data['firstName']=''; 
          $data['lastName']=''; 
          $data['userName'] = $user[0]->getSupportUserUsername()?$user[0]->getSupportUserUsername():'';      
          $data['email'] = $email; 
          $data['password'] = $password ? $password:''; 
          $data['instance'] = 'forgotpassword'; 
          $emailStatus = $couponHelper->emailer($data); 
          $logger = $this->get('logger'); 
          $logger->info('[Email]: [' . $emailStatus . ']'); 
          unset($data); 

          $this->get('session')->getFlashBag()->add('msg', $this->get('translator')->trans('forgot.pwd.sent')); 
         } else { 
          $this->get('session')->getFlashBag()->add('error', $this->get('translator')->trans('forgot.pwd.reg.not.email')); 
         } 
        } else { 
         $this->get('session')->getFlashBag()->add('error', $this->get('translator')->trans('forgot.pwd.not.reg')); 
        } 
       } 

       return $this->redirect($this->generateUrl('coupon_login_forgot_password')); 
      } 

      return $this->render('CouponLoginBundle:Login:forgot_password.html.twig', array('username' => $username)); 
     } 

Итак, в забыли пароль действие, как получить оригинальный пароль и отправить его пользователю. Пожалуйста, помогите мне.

+8

Вы никогда не сможете расшифровать пароль пользователя и, безусловно, никогда не будете отправлять ему по электронной почте. – zdszsdasd

ответ

2

ВЫ НЕ МОЖЕТЕ ПОЛУЧИТЬ. Это проблема безопасности, вы никогда не должны расшифровывать пароли своих пользователей.

Пароль на самом деле запомнен как хэш, это односторонний процесс, который невозможно воспроизвести назад, целенаправленно.

+0

Тогда как мне это сделать. Можете ли вы предоставить мне пароль для кодирования и декодирования функции и конфигурации ??? –

+0

Вы должны использовать стандартный процесс, который отправляет почту пользователю и сбрасывает пароль, запрашивая новый. – Jean

+0

В symfony нет никакого интерфейса для создания пользовательского пароля? –

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