问题描述
|
首先,我想创建一个用户,将我的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
希望这可以帮助!
干杯,
迪特尔