ROLE_ADMIN没有登录错误的路由

时间:2015-06-20 14:47:55

标签: php mysql security symfony login

我写了一个用户提供商和注册工作正常。

但是当我将用户角色从ROLE_USER直接更改为ROLE_ADMIN并使用sequel pro(它仅用于测试)时,我无法登录,并收到错误消息:

  

无法为指定路线生成网址"登录"因为这样的路线不存在。

当我改回ROLE_USER时,登录就像魅力一样。

这是我的security.yml:

security:

    encoders:
        AppBundle\Entity\User:
            algorithm: bcrypt

    providers:
        users:
            entity:
                class:    AppBundle:User

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

        default:
            pattern:  ^/
            provider: users
            anonymous: ~
            form_login:
                check_path:          login_check
                login_path:          login
                default_target_path: profile_index
            logout:
                path:   logout
                target: profile_index

我是否必须定义我能够使用ROLE_ADMIN登录的任何内容?

如果您需要更多信息,请与我们联系。

编辑:

这是我的UserController:

/**
 * Class UserController
 * @Route(path="/user")
 */
class UserController extends Controller
{
  /**
   * @Route(path="/sign-up", name="user_signup")
   * @Method({ "GET", "POST" })
   */
  public function signUpAction(Request $request)
  {
    $form = $this->createForm('registration');
    $form->handleRequest($request);

    if ($form->isValid()) {
      $user = $form->getData();

      $this->get('registration_handler')
        ->createUser($user);

      return $this->redirectToRoute('profile_index');
    }

    return $this->render('User/signUp.html.twig', array(
      'form' => $form->createView()
    ));
  }

  /**
   * @Route(path="/login", name="user_login")
   */
  public function loginAction(Request $request)
  {
    $helper = $this->get('security.authentication_utils');

    return $this->render('User/login.html.twig', array(
      'last_username' => $helper->getLastUsername(),
      'error' => $helper->getLastAuthenticationError()
    ));
  }

  /**
   * @Route("/login-check", name="login_check")
   * @Method("POST")
   */
  public function loginCheckAction()
  {
    throw new \Exception('This should never be reached!');
  }

  /**
   * @Route("/logout", name="logout")
   * @Method("GET")
   */
  public function logoutAction()
  {
    throw new \Exception('This should never be reached!');
  }

  /**
   * @Route(path="/profile", name="user_profile")
   */
  public function profileAction()
  {
    return $this->render('User/profile.html.twig');
  }
}

我刚刚添加到security.yml

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER

access_control:
    - { path: ^/user, roles: [ROLE_USER, ROLE_ADMIN] }

但这并没有改变任何事情。

我没有在routing.yml中定义任何路由(就是其中的所有内容):

app:
    resource: "@AppBundle/Controller/"
    type:     annotation

1 个答案:

答案 0 :(得分:0)

确定,

我刚刚在login_path的security.yml中写了错误的路径。

很抱歉。