duanlei7101 2015-03-13 14:07
浏览 7

Symfony2登录验证

I know that it is a common thing but I can't find what mistake I'm doing and I'm getting crazy.

I can't login by a login form, when I submit the form, it returns to itself without error and not authenticated.

Thanks in advance!

Here is my security.yml

security:
     encoders:
         Symfony\Component\Security\Core\User\User: plaintext
         #Cityincheck\AppBundle\Entity\User:
             #algorithm: bcrypt
             #cost: 12

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER

providers:
    in_memory:
        memory:
            users:
                ryan:
                    password: ryanpass
                    roles: 'ROLE_USER'
                admin:
                    password: kitten
                    roles: 'ROLE_ADMIN'

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

    login_firewall:
        pattern:   ^/login$
        anonymous: ~
    admin_area:
        pattern:    ^/*
        form_login:
            check_path: /login_check
            login_path: /login
            provider: in_memory
            default_target_path: /admin
        logout:
            path:   admin_logout
            target: admin_login
        #anonymous: ~
        #http_basic:
        #    realm: "Secured Demo Area"

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

My routing.yml

admin_login:
    path: /login
    defaults: { _controller: AppBundle:AccessControl:login }

admin_login_check:
    path: /login_check

And my controller:

class AccessControlController extends Controller
{

public function loginAction(Request $request)
{
    $session = $request->getSession();

    // get the login error if there is one
    if ($request->attributes->has(SecurityContextInterface::AUTHENTICATION_ERROR)) {
        $error = $request->attributes->get(
            SecurityContextInterface::AUTHENTICATION_ERROR
        );
    } elseif (null !== $session && $session->has(SecurityContextInterface::AUTHENTICATION_ERROR)) {
        $error = $session->get(SecurityContextInterface::AUTHENTICATION_ERROR);
        $session->remove(SecurityContextInterface::AUTHENTICATION_ERROR);
    } else {
        $error = null;
    }

    // last username entered by the user
    $lastUsername = (null === $session) ? '' : $session->get(SecurityContextInterface::LAST_USERNAME);

    return $this->render(
        'AppBundle::login.html.twig',
        array(
            // last username entered by the user
            'last_username' => $lastUsername,
            'error'         => $error,
        )
    );
}
} 
  • 写回答

1条回答 默认 最新

  • duanniedang3946 2015-11-16 12:54
    关注

    The problem is in your security.yml. When somebody send form, browser sent HTTP request to /login_check to check login and password. But app don't allow to do it as user are not authenticated. You must add '/login_check' to access_control

    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/login_check, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, roles: ROLE_ADMIN }
    

    Or that

    access_control:
        - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, roles: ROLE_ADMIN }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题