Создание / вход пользователя с мобильного устройства с использованием Symfony2 и FOSUserBundle - PullRequest
5 голосов
/ 28 мая 2011

Во-первых, я хочу создать пользователя, отправляющего пост-запрос из моего приложения для Android на сервер, который использует Symfony2 и FOSUserBundle.

Наконец, я хочу войти в систему пользователя из мобильного приложения ипотом общаюсь данными с сервером.

Я знаю, как реализовать пост-запрос на андроид-устройстве.Но я не знаю, как мне нужно настроить FOSUserBundle, security.yml и т. Д. В соответствии с моими потребностями.Хотя мне может понадобиться _csrf_token или что-то еще, и я не знаю, где его взять.

Я уже изменил метод аутентификации с form_login на http_basic и думаю, что это будет самый простой способ сделать аутентификацию (используя httpsдля защиты паролей).

Но сейчас .. что мне нужно сделать, чтобы добиться создания и регистрации действий без форм?Что мне нужно поместить в пост-запрос на мобильном устройстве?

Спасибо за любые идеи, комментарии и решения !!

Ответы [ 2 ]

3 голосов
/ 05 января 2012

Поздний ответ, но это может помочь. Я работаю над подобной ситуацией, и я получил это:

В security.yml

security:
providers:
    fos_userbundle:
      id: fos_user.user_manager

firewalls:
    main:
        pattern: ^/
        stateless: true
        http_basic:
            realm: "API"

access_control:
    - { path: /, role: ROLE_USER }

role_hierarchy:
    ROLE_OWNER:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

В config.yml:

fos_user:
db_driver: orm
firewall_name: main
user_class: <your user class>

В моем методе испытаний:
Справка: Аутентификация для API Symfony2 (для использования в мобильных приложениях)

public function testAuthentication() 
{
    $client = $this->createClient();

    // not authenticated
    $client->request('GET', '<url>');
    $this->assertEquals(401, $client->getResponse()->getStatusCode());

    // authenticated
    $client->request('GET', '<url>', array(), array(), array(
        'PHP_AUTH_USER' => '<username from your database>', 
        'PHP_AUTH_PW' => '<password>'
    ));
    $this->assertEquals(200, $client->getResponse()->getStatusCode());

}

Для связи с этим API я бы предложил cURL или Buzz

Надеюсь, это поможет!

Приветствия

Dieter

2 голосов
/ 12 февраля 2014

У меня была такая же проблема, но я нашел решение для регистрации: (пользователь вводит имя пользователя, адрес электронной почты и пароль)

  1. В UserController вашегоUserBundle ( src / Project / UserBundle / Controller / DefaultController ) определяет новую функцию registerAction () :

     public function registerAction()
    {
        $user = new User();
    
        $request  = $this->getRequest();
        $username = $request->request->get('username');
        $password= $request->request->get('password');
        $email= $request->request->get('email');
    
      $factory = $this->get('security.encoder_factory'); 
    
      $encoder = $factory->getEncoder($user); 
      $password = $encoder->encodePassword($password, $user->getSalt()); 
      $user->setPassword($password); 
    
    
        $user->setUsername($username);
        $user->setUsernameCanonical($username);
        $user->setEmail($email);
        $user->setEmailCanonical($email);
        $user->setEnabled(true);
        $user->setLocked(false);
        $user->setExpired(false);
    
        $user->setCredentialsExpired(false);
        $em = $this->get('doctrine')->getEntityManager();
        $em->persist($user);
        $em->flush();
       /* $response = new Response(json_encode(array('user' => $tes)));
         $response->headers->set('Content-Type', 'application/json');
    
          return $response;*/
          return new JsonResponse('good');
    }
    

    }

и не забыл импортировать:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
use Telifoon\UserBundle\Entity\User;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
  1. в UserBundle / Resources / config / routing.yml добавить следующий маршрут:

    inscription_post: pattern: / v1 / api / register default: {_controller: ProjectUserBundle: Default: register} требования: _method: POST

  2. Моя сущность (src / Project / UserBUndle / Entity / User ) - это:

    use FOS\UserBundle\Model\User as BaseUser;
    
    /**
     * User
     */
    class User extends BaseUser
    {
        public function __construct()
        {
            parent::__construct();
            // your own logic
        }
    }
    
  3. Если при тестировании пользователь правильно добавлен в мою базу данных:)

...