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

Stu*_*uck 5 android bundle symfony

首先,我想创建一个用户从我的Android应用程序向服务器发送一个后请求,该服务器使用Symfony2和FOSUserBundle.

最后,我想从移动应用程序登录用户,然后与服务器进行数据通信.

我知道如何在android-device上实现post-request.但我不知道如何配置FOSUserBundle和security.yml等以满足我的需求.虽然我可能需要一个_csrf_token或其他东西,我不知道从哪里得到它.

我已经将身份验证方法从form_login更改为http_basic,并认为这将是进行身份验证的最简单方法(使用https来保护密码).

但是现在......我需要做什么,以实现创建和登录没有表单的操作?我需要在移动设备上的后请求中添加什么内容?

感谢您的任何想法,意见和解决方案!

Zie*_*bhi 2

我遇到了同样的问题,但我找到了注册的解决方案 :(用户输入用户名、电子邮件和密码)

  1. 在 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');
    }
    
    Run Code Online (Sandbox Code Playgroud)

    }

并且不要忘记导入:

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;
Run Code Online (Sandbox Code Playgroud)
  1. UserBundle/Resources/config/routing.yml中添加以下路由:

    inscription_post: 模式: /v1/api/register 默认值: { _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
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果测试用户已正确添加到我的数据库中:)