使用| Symfony2和FOSUserBundle从移动设备创建/登录用户

问题描述

| 首先,我想创建一个用户,将我的android应用程序的后请求发送到使用Symfony2和FOSUserBundle的服务器。 最后,我想从移动应用程序登录用户,然后与服务器通信数据。 我知道如何在android设备上实现后期请求。但是我不知道如何配置FOSUserBundle和security.yml等以适应我的需求。尽管我可能需要_csrf_token之类的东西,但我不知道从哪里获取它。 我已经将身份验证方法从form_login更改为http_basic,并认为这将是进行身份验证的最简单方法(使用https来保护密码)。 但是现在..我需要做些什么才能实现没有表单的创建和登录操作?我需要在移动设备上添加后请求吗? 感谢您的任何想法,评论解决方案!!     

解决方法

        我遇到了同样的问题,但是我找到了注册的解决方案:(用户输入用户名,电子邮件和密码) 在您的UserBundle的UserController中(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;
在UserBundle / Resources / config / routing.yml中添加以下路由: inscription_post:         模式:/ v1 / api / register         默认值:{_controller:ProjectUserBundle:Default:register}         要求:             _方法:开机自检 我的实体(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
    }
}
如果测试,则将用户正确地添加到我的数据库中:)     ,        答案较晚,但可能会有所帮助。 我正在处理类似的情况,并且得到了以下信息: 在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>
在我的测试方法中: 参考:Symfony2 api的身份验证(供移动应用程序使用)
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(
        \'PHP_AUTH_USER\' => \'<username from your database>\',\'PHP_AUTH_PW\' => \'<password>\'
    ));
    $this->assertEquals(200,$client->getResponse()->getStatusCode());
} 为了与该API通信,我建议使用cURL或Buzz 希望这可以帮助! 干杯, 迪特尔