php – 从Symfony2中的http_basic身份验证注销

前端之家收集整理的这篇文章主要介绍了php – 从Symfony2中的http_basic身份验证注销前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
每当我进入/ admin / logout时,我都被正确地重定向到我的项目的根目录,但是当我访问/ admin /时仍然登录,因为我没有提示输入凭据.

这是我的配置:

security.yml

security:
    firewalls:
        admin_area:
            pattern:    ^/admin
            http_basic: ~
            stateless:  true
            switch_user: { role: ROLE_SUPER_ADMIN,parameter: _want_to_be_this_user }
            logout: { path: /admin/logout,target: / }

AdminBundle /资源/配置/ routing.yml中

logout:
    pattern:   /logout

应用程序/配置/ routing.yml中

admin:
    resource: "@AdminBundle/Resources/config/routing.yml"
    prefix:   /admin

授权仍然存在,因为标题状态为Authorization:Basic YWRtaW46cEAkJHcwUmQh所以我想在请求期间仍然会向应用程序提供凭据.

我知道根据this question没有正确的方法从HTTP Basic Auth注销但也许Symfony2允许它?

通过http auth登录后,您的浏览器将缓存并以标题的形式将登录凭据添加到每个后续请求中,如下所示:
Authorization:Basic YWRtaW46YWRtaW4=

当您注销时,对服务器的下一个请求仍将保留您的http凭据并再次登录.

因此,诀窍是在服务器端销毁会话后丢失客户端的http凭据.

在过去,有一些hackidy方法,如提交虚假凭据或一些模糊的IE方法删除缓存.但我不认为这些方法仍然有效.

什么仍然有效(我使用symfony 2.7和谷歌浏览器45测试了以下方法)正在使用HTTP 401未经授权的响应回复客户端.

看看这个:

将以下内容添加到app / config / security.yml文件的注销部分

logout:
    success_handler: logout_listener

到您的服务配置app / config / services.yml

logout_listener:
    class: AppBundle\logoutListener

然后创建一个响应HTTP 401未授权的侦听器

<?PHP 

namespace AppBundle;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Http\logout\logoutSuccessHandlerInterface;

class logoutListener implements  logoutSuccessHandlerInterface 
{
    public function onlogoutSuccess(Request $request) 
    {
        return new Response('',401);
    }
}

注销后,您的应用程序将向浏览器发送401,这将认为身份验证失败导致身份验证缓存被清除(无论如何,谁想要记住错误的凭据)并再次提示您的凭据

猜你在找的PHP相关文章