2013-03-07 15 views
5

Şu anda Symfony2'nin Güvenlik bileşenini ele alıyorum.Symfony2 kullanıcılarını bir web hizmetiyle doğrulamak

Kullanıcıları web servisine karşı kimlik doğrulamayı denerim. Bir kullanıcının kimliğini doğrulamak için web servisine bir kullanıcı adı ve şifre vermem gerekiyor.

UserProvider'ı uygulayan bir sınıf oluşturmam gerektiğini biliyorum. Ancak, loadUserByUsername işlevi web servis gereksinimlerime uymuyor: Bir kullanıcının kimliğini doğrulamak için, kullanıcı adı ve şifre isterken, UserProvider'ın işlevi sadece kullanıcı adı gerektiriyor. Symfony2 authentication without UserProvider

Ben birkaç gün için bu konuda mücadele oldum ... yük olacağını Bunun üstesinden gelmenin

+1

Bağlantılı sorudaki cevabım herhangi bir konuda yardımcı oldu mu? Yoksa sadece kafamı karıştırdı mı? – Cerad

+2

Ne tür bir web servisi kullanıyorsunuz? Şifreler nasıl kodlanır? Belki de http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html adresinde açıklandığı gibi bir kimlik doğrulama sağlayıcısı oluşturmanız gerekir. http://stackoverflow.com/questions/14928514/symfony2-authentication-via-3rd-party-rest-api/14947332#14947332 adresini ziyaret edin. Başlamak için size yardımcı olmalısınız. – hacfi

+0

Her iki cevabınız için çok teşekkürler! Bunu yapmak için çalışacağım @hacfi [here] (http://stackoverflow.com/questions/14928514/symfony2-authentication-via-3rd-party-rest-api/14947332#14947332). – SupaCoco

cevap

0

Tek yönlü: Burada

Ben yüz soruna benzer bir sorudur kullanıcı adıyla kullanıcı adı ve ardından şifreyi doğrulayın. Bir kullanıcı belirtilen kullanıcı adı için mevcutsa ve girilen şifre o kullanıcının şifresiyle eşleşirse, kullanıcının kimliğini doğrulayın. Örnek:

services.yml:

public function userLogin($username, $password) 
{ 
    $em = $this->getEntityManager(); 
    $query = $em->createQuery('SELECT u FROM VenomCoreBundle:User u WHERE u.username = :username OR u.email = :username AND u.isDeleted <> 1 ') 
      ->setParameter('username', $username); 
    try { 
     $entity = $query->getSingleResult(); 
     if (count($entity) > 0) { 
      $encoder = new MessageDigestPasswordEncoder('sha512', true, 10); 
      $passwordEnc = $encoder->encodePassword($password, $entity->getSalt()); 
      $userPassword = $entity->getPassword(); 

      if ($passwordEnc == $userPassword) { 
       $tokenValue = $entity->getUserToken(); 
       $profile = $entity->getUserProfile(); 
       if(!$profile) { 
        return false; 
       } 
       $userName = $profile->getFullName(); 



       $response = array(
        'token' => $tokenValue, 
        'username' => $userName 
       ); 
      } else { 
       return false; 
      } 
     } 
    } catch (\Doctrine\Orm\NoResultException $e) { 
     return false; 
    } 

    return $response; 
} 
2

Yani o anlamda bu sorunu giderilmiştir

services: 
    user_provider: 
     class: "%my_class%" 
     arguments: ["@service_container"] 

WebServiceUserProvider.php

/** 
* @param ContainerInterface $container 
*/ 
public function __construct(ContainerInterface $container) 
{ 
    $this->apiClient = $container->get('api_client'); 
    $this->request = $container->get('request'); 
} 

ve loadUserByUsername yönteminde $password = $this->request->get('password'); kullanmak

İlgili konular