带rest登录和注册的Symfony 2 FOSUserBundle

带rest登录和注册的Symfony 2 FOSUserBundle,symfony,fosuserbundle,lexikjwtauthbundle,Symfony,Fosuserbundle,Lexikjwtauthbundle,我看过很多关于stackoveflow的问题和文章,但找不到合适的答案 我使用的是fosuserbundle、hwiouthbundle和lexikjwt bundle 我正在开发一个基于symfony的api,它将被android应用程序和angular应用程序使用 现在,我需要注册和登录系统与fosuserbundle facebook登录与HwiAuthBundle和api保护与lexikjwt捆绑 我已经实现了fosuserbundle和hwiouthbundke,它们都可以工作,甚至没

我看过很多关于stackoveflow的问题和文章,但找不到合适的答案

我使用的是fosuserbundle、hwiouthbundle和lexikjwt bundle

我正在开发一个基于symfony的api,它将被android应用程序和angular应用程序使用

现在,我需要注册和登录系统与fosuserbundle facebook登录与HwiAuthBundle和api保护与lexikjwt捆绑

我已经实现了fosuserbundle和hwiouthbundke,它们都可以工作,甚至没有编写用户控制器。但我需要的是休息,而不是形式。但我不能超越类型:在路由器中休息


现在,我如何登录,使用rest向fosuserbundle注册用户?我不想使用fosouth服务器。只需要注册和登录api,而不是rest从web

因此,如果您想使用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登录防火墙的
检查路径

有关令牌生成的更多信息,请参阅。 希望这对你有帮助

编辑


如果您想了解LexikJWTAuthenticationBundle+FOSUserBundle+FOSRestBundle实现的完整示例,请参见我的

伙计们,停止在会话中使用JWT。它用于单点登录和第三方身份验证,而不是会话。你看。@thomaskonrad的人做他们想做的事,这并不会让答案变得糟糕。。。不合理的否决票,最坏的情况下,它应该是在这个问题上。遗漏的警告让我觉得很糟糕。但公平地说,我也否决了这个问题,只是这不是用JWT来代替会话,而是将授权从无状态Web服务器(php)传递到第三方应用程序(本例中为android),而且对于许多其他应用程序也可以这样做。我不明白这里的意思。。。