Symfony 3.2 在几天之前发布了,但我们已经开始忙于 Symfony 3.3,它将在 2017年5月底发布。本文是首篇 "Symfony 3.3全新" 系列,我们将展示这个版本中一些最有价值的新功能:


Contributed by
Kévin Dunglas
in #18952.

Symfony Security组件 对一系列authentication mechanisms(认证架构)提供了卓越的支持,例如表单登陆和HTTP BASIC认证。在Symfony 3.3中我们基于JSON添加了一种全新架构。它很像传统的表单登陆,但以一个JSON文档作为入口点,对API来说非常适用,特别是同时使用 JWT 时。

实践中,首先你要添加 json_login 选项到防火墙中,然后定义用于用户登陆的URL:

1
2
3
4
5
6
7
8
# app/config/security.yml
security:
    # ...
    firewalls:
        main:
            # ...
            json_login:
                check_path: /login

接下来,创建一个空的controller与这那个URL进行关联。控制器必须是空的,因为Symfony会截断并处理该请求(它会检查凭据,验证用户,必要的话抛出异常,等等):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// src/AppBundle/Controller/SecurityController.php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
 
class SecurityController extends Controller
{
    /**
     * @Route("/login", name="login")
     */
    public function loginAction(Request $request)
    {
    }
}

这就是全部了。现在你可以在登陆用户时发送一个JSON文档到 /login URL,像下面这样:

1
{ "username": "dunglas", "password": "foo1234" }

你可以参考 如何构建JSON authentication的端点 一文来了解更多细节并学习它的自定义选项。