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的端点 一文来了解更多细节并学习它的自定义选项。