Guard Authentication 在 Symfony 3.4 里的新改进

Guard Authentication 在 Symfony 3.4 里的新改进

Chris Yue No Comment
Posts

自从接手公司一个商派二开项目之后,跟 Symfony 的接触越来越少了,但我还是保持关注 Symfony 的进展,已经成为了一种习惯。不得不说很早接触 Symfony 是一件幸运的事情,对我来说它不仅是一个框架,或者一堆组件、它更是一本自己会不断成长的教程,教会我不少东西。

真是没有对比就没有伤害啊!商派这代码我真不想看……

言归正传。Guard Authentication 在我心目当中一直是一个排名绝对可进前 10 的库,诞生于 Symfony Security Component,并从之提取精华浓缩为一体,给开发者带来了不少的方便。虽然本次针对接口的改动并不大,但冲着 Symfony 开发组要把代码写到极致的精神,我认为很值得一说。

除了接口名改得更加简短以外,主要的修改在于将 getCredential 方法拆分成两个:getCredentialssupports。小小的改动,实际上将 getCredential 方法的职责更加明确了:就是用来获取用户登录信息的!从使用者的角度来说,getCredential 方法以前返回 null 表示跳过身份认证的方式,的确是有点别扭。此次改动虽小,但让开发者用起来感觉比以前畅快多了,对比前后:

// 3.4 之前
use Symfony\Component\Security\Guard\AbstractGuardAuthenticator;

class TokenAuthenticator extends AbstractGuardAuthenticator
{
    public function getCredentials(Request $request)
    {
        // 两个职责一个方法,不看文档不知道什么意思
        if (!$token = $request->headers->get('X-AUTH-TOKEN')) {
            return null;
        }

        return ['token' => $token];
    }
}

// 3.4 之后
class TokenAuthenticator extends AbstractGuardAuthenticator
{
    // 两个方法都是单一职责,就算没有文档,也能看出来是什么意思
    public function supports(Request $request)
    {
        return $request->headers->has('X-AUTH-TOKEN');
    }

    public function getCredentials(Request $request)
    {
        return ['token' => $request->headers->get('X-AUTH-TOKEN')];
    }
}

我很喜欢一句话叫做:设计精良的代码本身,就是很好的文档。不得不说 Symfony 的『文档』真是写得越来越好了。

Guard Authentication 在 Symfony 3.4 里的新改进 by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

如果觉得文章还不错,就请扫码鼓励一下作者吧
天使打赏人

发表评论

64 − = 56