Symfony多个提供者FOSUSERBUNDLE和in_memory

时间:2017-03-27 14:23:26

标签: javascript php symfony

大家好我现在用symfony开发一个应用程序,我有一个frontOffice和一个Backoffice视图,对于frontOffice,我使用FosUserBundle来建立连接用户,而对于后台,我会与in_memory提供者建立连接juste。当我使用这个解决方案时,我在同一个登录页面(/ login)中有相同的重定向,我会将管理员的后台重定向到(/ admin / login)。

我的安全档案:

# app/config/security.yml

security:
  encoders:
    Project\UserBundle\Entity\User: sha512

  role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

  providers:
    main:
      id: fos_user.user_provider.username_email
    in_memory:
      memory:
        users:
          user:  { password: userpass, roles: [ 'ROLE_ADMIN' ] }
          admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }


  firewalls:
    main:
      pattern:      ^/
      anonymous:    true
      provider:     main
      form_login:
        login_path: fos_user_security_login
        check_path: fos_user_security_check
        default_target_path: /index
      logout:
        path:       fos_user_security_logout
        target:     /login
      remember_me:
        secret:     %secret%

    main_login:
        pattern:   ^/admin/login$
        anonymous: true # On autorise alors les anonymes sur ce pare-feu

    main2:
      pattern:      ^/admin
      anonymous:    false
      provider:     in_memory
      form_login:
        default_target_path:            /admin
        login_path: /admin/login
        check_path: /admin/login_check
      logout:
        path:       /admin/logout
        target:     /admin/login



  access_control:
    #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
     #- { path: ^/admin, roles: ROLE_ADMIN }

我的Backoffice的loginAction

<?php

namespace Project\BackofficeBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
class SecurityController extends Controller
{
  public function loginAction(Request $request)
  {
    // Si le visiteur est déjà identifié, on le redirige vers l'accueil
    if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
      return $this->redirectToRoute('project_backoffice_products');
    }

    // Le service authentication_utils permet de récupérer le nom d'utilisateur
    // et l'erreur dans le cas où le formulaire a déjà été soumis mais était invalide
    // (mauvais mot de passe par exemple)
    $authenticationUtils = $this->get('security.authentication_utils');

    return $this->render('ProjectBackofficeBundle:Backoffice:login.html.twig', array(
      'last_username' => $authenticationUtils->getLastUsername(),
      'error'         => $authenticationUtils->getLastAuthenticationError(),
    ));
  }
}

我的广告文件

login:
    path: /admin/login
    defaults:
        _controller: ProjectBackofficeBundle:Security:login

admin_login_check:
    path: /admin/login_check

logout:
    path: /admin/logout

0 个答案:

没有答案