authentication - Symfony 2 中的两个独立登录页面

标签 authentication symfony

我正在尝试弄清楚如何拥有两个单独的登录页面:.com 页面的默认登录和特定用户的默认登录,例如路由 /special

这在一个 SF2 项目中很容易实现吗?

更新:

我的防火墙中有以下配置(我正在使用 fosub)

providers:
    custom:
        id: ib.user_provider
    fos_userbundle:
        id: fos_user.user_manager
    my_fos_facebook_provider:
        id: my.facebook.user

firewalls:
    special:
        pattern: ^/special
        form_login:
            provider: fos_userbundle
            login_path: /special/login
            check_path: /special/login_check
            use_referer: false
            default_target_path: /special
            success_handler: ib.login_handler
            provider: custom
    main:
        pattern: ^/.*
        form_login:
            provider: fos_userbundle
            login_path: /login
            check_path: /login_check
            use_referer: false
            default_target_path: /
            provider: custom
        fos_facebook:
            always_use_default_target_path: true
            app_url: "http://apps.facebook.com/%facebook_app_id%/"
            server_url: "http://aw.com/aw/web/app_dev.php/"
            login_path: /login
            check_path: /login_check/facebook
            default_target_path: /checkFB
            success_handler: facebook_auth_success_handler
            provider: my_fos_facebook_provider
        logout:
            #handlers: ["fos_facebook.logout_handler"]
            target: /
        anonymous:    ~  

在 ib.login_handler 我有以下内容:

public function onAuthenticationSuccess(Request $request,TokenInterface $token)
{
    if ($this->security->isGranted('ROLE_CATEGORIZER'))
    {
        $response = new RedirectResponse($this->router->generate('MyCoBundle_mailAdmin_index'));
    }


    return $response;
}

如果我去 mydomain.com/special 使用此配置,我会收到以下错误:Fehler: Umleitungsfehler(英文:Error: Redirection error)

更新:

在 chrome 中我得到:找不到“GET/special/login”的路线

404 Not Found - NotFoundHttpException
1 linked Exception: ResourceNotFoundException »

我没有此登录路径的特殊路由。我想要实现的只是,特殊用户只能访问路径/special 下的页面。

最佳答案

这是可能的,你可以定义很多保护区 => 很多防火墙。

让我们看看这个 app/config/security.yml 配置来了解如何:

firewalls:

    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    special_area:
        pattern:  ^/special
        anonymous: ~
        form_login:
            check_path: /special/login_check
            login_path: /special/login
        logout:
            path:   /special/logout
            target: /

    general_area:
        pattern:  ^
        anonymous: ~
        form_login:
            check_path: /login_check
            login_path: /login
        logout:
            path:   /logout
            target: /


access_control:
    - { path: ^/_internal, role: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }

    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/special/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }

请注意,special_area 必须在 genereal_area 之上定义,因为 general_area 的模式与其他所有模式都匹配...

你必须在你的 bundle routing.yml 中添加什么:

_security_login_special:
    pattern:  /special/login
    defaults: { _controller: FOSUserBundle:Security:login }

_security_check_special:
    pattern:  /special/login_check

_security_logout_special:
    pattern:  /special/logout

您必须为 general_area 添加另一个角色,因此您需要覆盖 FOSUserManager 并使其在用户加载时添加此补充角色...(更多信息:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/1.2.0/Resources/doc/user_manager.md)

关于authentication - Symfony 2 中的两个独立登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10166081/

相关文章:

asp.net-mvc - 使用同一应用程序但具有多个域的单点登录ASP.NET MVC

php - 如何使异常消息在 Symfony 4 用户检查器中可翻译?

php - Symfony 3 应用程序的 Google Play Market 身份验证

Doctrine Query Builder - 如何选择多对多关系?

ios - 为什么 iOS 应用最近更改了身份验证方法?

PHP session_start 错误(找不到这样的文件或目录)

node.js - 使用 Passport 进行身份验证后创建新 session

database - PostgreSQL:只读用户

Symfony 4,一种从现有数据库生成实体的方法?

forms - 在 Symfony 2 中创建表单网格