当前位置: 首页 > 知识库问答 >
问题:

Symfony PHP注销不工作

澹台成龙
2023-03-14

我有一个注销功能,在另一个项目中工作,但由于某种原因,在我目前正在处理的项目中不工作。看起来它只是刷新了页面。我查了Symfony的官方留档https://symfony.com/doc/current/security.html但无济于事。希望你们能帮我。

更新:Security.yml:

# To get started with security, check out the documentation:
# https://symfony.com/doc/current/security.html
security:
    providers:
        in_memory:
            memory:
                users:
                    beheerder:
                        password: admin
                        roles: 'ROLE_BEHEERDER'

    access_control:
        - { path: '^/beheerder/*', roles: [ROLE_BEHEERDER] }

    encoders:
        Symfony\Component\Security\Core\User\User: plaintext


    firewalls:
        # disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        main:
            anonymous: 
            # activate different ways to authenticate

            # https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
            http_basic: ~

            # https://symfony.com/doc/current/security/form_login_setup.html
            #form_login: ~
            logout:
                path: security_logout
                target: /

控制器:

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\ExpressionLanguage\Expression;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;


class DefaultController extends Controller
{

    //Functie om naar de homepagina te gaan met een redirect naar de homepagina van de gebruiker.

    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request, AuthorizationCheckerInterface $authorizationChecker)
    {
        if ($authorizationChecker->isGranted(new Expression('"ROLE_BEHEERDER" in roles')))
        {
            return $this->redirectToRoute('beheerder');
        }
        else
        {
            return $this->render('default/index.html.twig');
        }
    }

    /**
     * @Route("/beheerder", name="beheerder")
     */
    public function beheerder(Request $request)
    {
        return new Response($this->renderView('beheerder/index.html.twig'));
    }

    /**
     * @Route("/logout", name="security_logout")
     */
    public function logoutAction(Request $request)
    {
        return new Response($this->renderView('logout.html.twig'), 401);
    }


}

注销小枝:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>{% block title %}Overzicht{% endblock %}</title>
        <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
    </head>
    <body>
        <p>Redirecting back....</p>
        <script>
            document.cookie = 'PHPSESSID=; Path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
            window.location.href = '{{ url('homepage') }}';
        </script>
    </body>
</html>

编辑:我正在使用Symfony 3.4。当我进入页面 /logout它看起来像只是刷新页面。我可以看到它进入注销功能,但用户不会注销。

共有3个答案

陆安国
2023-03-14

你还没有设置防火墙

main:
        anonymous: ~

它应该看起来像main:anonymous:~secured_arena:pattern:^/beheerder

这意味着每个人都可以访问“主”防火墙,您应该限制该区域

当你有了它,然后只需添加到防火墙以下行

 logout:
            path:   /logout
            target: /

并定义 /logout路线,你已经做了。Symfony会自动注销。

您还需要指定验证器和检查路径检查https://symfony.com/doc/current/security/custom_password_authenticator.html

邓夕
2023-03-14

权限改造在你定义注销路径为IS_AUTHENTICATED_ANONYMOUSLY这是错误的。

请删除-{path:'^/logout',角色:[IS\u AUTHENTICATED\u ANONYMOUSLY]}

编辑-{path:'^/logout',角色:[ROLE\u BEHEERDER]}

夏俊杰
2023-03-14

从Symfony安全文档:https://symfony.com/doc/3.4/security.html#logging-出去

请注意,在使用http基本身份验证防火墙时,没有真正的注销方法:唯一的注销方法是让浏览器停止在每次请求时发送您的姓名和密码。清除浏览器缓存或重新启动浏览器通常会有所帮助。一些web开发工具在这里可能也很有用。

您正在使用http basic,因此清除cookie将不起作用。因此,如果您想使用该代码,则需要实现不同的身份验证并停止使用http basic。

 类似资料:
  • 我正在尝试Laravel5.2中的简单注销功能,但我真的不明白我错在哪里。如果有人能帮忙,那就太好了。 这是路线 loginController方法: 视图中使用此功能的链接: 会话存储代码: AuthController构造函数: 当用户单击注销链接时,它会重定向到根页面,但不会真正破坏会话或注销。它不需要登录来查看页面(它应该这样做)。

  • 我使用的是Laravel5.2框架,我已经使用命令创建了auth。我的AuthController中有以下内容: 这些在我的路线上。php文件: 登录/注册时,一切正常,但当我按下注销按钮时,没有任何变化,我仍然登录。我想要的是在单击注销按钮后重定向到auth/login视图。请帮忙。

  • 我的问题和这里问的很相似 我使用的是Laravel 5.2 我的路线:列表 我的注销链接 注销链接位于标题中。刀身php文件。文件的位置为 我的路线。php 此路由位于中间件的外面 授权控制器。php 当“注销”按钮单击时,其按会话要求重定向并没有结束,因为若我通过URL访问,我仍然登录

  • 完成注销后,Azure注销页面不会重定向用户。它只返回以下信息: 你注销了你的账户。关闭所有浏览器窗口是个好主意。 我尝试了不同的注销URL,我发现: > https://login.microsoftonline.com/MY_TENANT/oauth2/logout?post_logout_redirect_uri=https://micway.com.au/ https://login.mi

  • 我的spring配置xml文件中有这个。 角色在登录时已正确验证。我有两个问题: > 在我的控制器中: 页面正确重定向并显示“注销成功”页面,但如果我再次将URL更改为转到“/欢迎”,它将显示该页面。它不应该显示403-拒绝访问页面吗?

  • 我正在使用WSO2身份服务器5.0.0测试SAML SSO,其中两个PHP应用程序实例作为服务提供者(使用onelogin phpsaml)。我设法使单点登录工作,但现在我面临单点注销的问题。 当我从PHPApp1触发注销请求时,WSO2 IDP以注销响应进行响应,它似乎工作正常 WSO2 IDP触发对saml会话参与者的注销请求,在本例中是对PHPApp2的注销请求 PHPApp2处理注销请求,