带有休息登录和注册的 Symfony 2 FOSUserBundle
Symfony 2 FOSUserBundle with rest login and registration
我浏览了很多 stackoveflow 问题和文章,但找不到合适的答案。
我正在使用 fosuserbundle、hwiouthbundle 和 lexikjwt 包。
我正在开发一个基于 symfony 的 api,它将被 android 应用程序和 angular 应用程序使用。
现在我需要使用 fosuserbundle 的注册和登录系统以及使用 hwiouthbundle 的 facebook 登录和 api 使用 lexikjwt 包的保护。
我已经实现了 fosuserbundle 和 hwiouthbundke,它们甚至都没有编写用户控制器就可以工作。但我需要休息而不是形式。但我无法输入:在路由器中休息。
现在我该如何登录,注册用户?我不想使用 fosouth 服务器。只需要注册并使用 api 登录,而不是从网络上休息。
因此,如果您想使用 FOSUserBundle 手动注册用户,请创建一个控制器并添加一个注册方法:
// Acme/AppBundle/Controller/SecurityController
public function registerAction(Request $request)
{
$userManager = $this->get('fos_user.user_manager');
$entityManager = $this->get('doctrine')->getManager();
$data = $request->request->all();
// Do a check for existing user with userManager->findByUsername
$user = $userManager->createUser();
$user->setUsername($data['username']);
// ...
$user->setPlainPassword($data['password']);
$user->setEnabled(true);
$userManager->updateUser($user);
return $this->generateToken($user, 201);
}
以及 generateToken 方法
protected function generateToken($user, $statusCode = 200)
{
// Generate the token
$token = $this->get('lexik_jwt_authentication.jwt_manager')->create($user)
$response = array(
'token' => $token,
'user' => $user // Assuming $user is serialized, else you can call getters manually
);
return new JsonResponse($response, $statusCode); // Return a 201 Created with the JWT.
}
还有路线
security_register:
path: /api/register
defaults: { _controller: AcmeAppBundle:Security:registerAction }
methods: POST
配置与登录相同的防火墙
// app/config/security.yml
firewalls:
// ...
register:
pattern: ^/api/register
anonymous: true
stateless: true
// ...
access_control:
// ...
- { path: ^/api/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
要登录,只需使用 FOSUser 登录防火墙的 check_path
。
有关令牌生成的详细信息,请参阅 JWTManager。
希望对你有帮助。
编辑
如果您想要 LexikJWTAuthenticationBundle + FOSUserBundle + FOSRestBundle 实现的完整示例,请参阅我的 symfony-rest-api
我浏览了很多 stackoveflow 问题和文章,但找不到合适的答案。
我正在使用 fosuserbundle、hwiouthbundle 和 lexikjwt 包。
我正在开发一个基于 symfony 的 api,它将被 android 应用程序和 angular 应用程序使用。
现在我需要使用 fosuserbundle 的注册和登录系统以及使用 hwiouthbundle 的 facebook 登录和 api 使用 lexikjwt 包的保护。
我已经实现了 fosuserbundle 和 hwiouthbundke,它们甚至都没有编写用户控制器就可以工作。但我需要休息而不是形式。但我无法输入:在路由器中休息。
现在我该如何登录,注册用户?我不想使用 fosouth 服务器。只需要注册并使用 api 登录,而不是从网络上休息。
因此,如果您想使用 FOSUserBundle 手动注册用户,请创建一个控制器并添加一个注册方法:
// Acme/AppBundle/Controller/SecurityController
public function registerAction(Request $request)
{
$userManager = $this->get('fos_user.user_manager');
$entityManager = $this->get('doctrine')->getManager();
$data = $request->request->all();
// Do a check for existing user with userManager->findByUsername
$user = $userManager->createUser();
$user->setUsername($data['username']);
// ...
$user->setPlainPassword($data['password']);
$user->setEnabled(true);
$userManager->updateUser($user);
return $this->generateToken($user, 201);
}
以及 generateToken 方法
protected function generateToken($user, $statusCode = 200)
{
// Generate the token
$token = $this->get('lexik_jwt_authentication.jwt_manager')->create($user)
$response = array(
'token' => $token,
'user' => $user // Assuming $user is serialized, else you can call getters manually
);
return new JsonResponse($response, $statusCode); // Return a 201 Created with the JWT.
}
还有路线
security_register:
path: /api/register
defaults: { _controller: AcmeAppBundle:Security:registerAction }
methods: POST
配置与登录相同的防火墙
// app/config/security.yml
firewalls:
// ...
register:
pattern: ^/api/register
anonymous: true
stateless: true
// ...
access_control:
// ...
- { path: ^/api/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
要登录,只需使用 FOSUser 登录防火墙的 check_path
。
有关令牌生成的详细信息,请参阅 JWTManager。 希望对你有帮助。
编辑
如果您想要 LexikJWTAuthenticationBundle + FOSUserBundle + FOSRestBundle 实现的完整示例,请参阅我的 symfony-rest-api