0

我用 symfony2 创建了一个简单的应用程序。用户可以使用他/她的用户名和密码登录。我为登录屏幕创建了一个简单的视图,然后我检查了控制器中的用户凭据。我没有使用 symfony2 安全性。这是我的控制器代码:-

namespace College\UserBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use College\UserBundle\Entity\User;
use College\UserBundle\Entity\Usertype;
use College\UserBundle\Form\LoginForm;
use College\UserBundle\Form\RegisterForm;


class UserController extends Controller
{

public function indexAction()
{
$entity = new User();
    $form = $this->createForm(new LoginForm(), $entity);
    $request = $this->getRequest();

    if ($request->getMethod() == 'POST') {
        $form->bindRequest($request);
        if ($form->isValid()) {
        $em = $this->getDoctrine()
              ->getEntityManager();
        $em->persist($entity);
        $userrepository = $em->getRepository('CollegeUserBundle:User');
        $auth = $userrepository->findOneBy(array('login' => $entity->getLogin(), 'password' => $entity->getPassword()));
        if($auth)
        {

            $session = $this->getRequest()->getSession();
            $session->set('user', $auth);
            $this->get('session')->setFlash('notice', 'You Have Successfully Logged In!');
            return $this->redirect($this->generateUrl('CollegeUserBundle_home'));

        }
        else
        return $this->render('CollegeUserBundle:User:loginpage.html.twig',array(
                'form' => $form->createView(), 'error' => 'Please Correct Your Login Details And Enter the Correct login and Password', ));
        }
     }

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



public function loginAction()
{
    $session = $this->get('session')->get('user');
    return $this->render('CollegeUserBundle:User:home.html.twig', array(
                 'info'      => $session,));
}

public function logoutAction()
{
     $this->get('request')->getSession()->invalidate();
     return $this->redirect($this->generateUrl('CollegeUserBundle_index'));
}

路由.yml

CollegeUserBundle_index:
    pattern:  /
    defaults: { _controller: CollegeUserBundle:User:index }
    requirements:
        _method:  GET|POST

CollegeUserBundle_home:
    pattern:  /home
    defaults: { _controller: CollegeUserBundle:User:login }
    requirements:
        _method:  GET|POST

CollegeUserBundle_logout:
    pattern:  /logout
    defaults: { _controller: CollegeUserBundle:User:logout }
    requirements:
        _method:  GET

实体(User.php)

 This file contains all user details including Username, Created Date, login, password and usertype.

现在我想用 symfony 安全性做所有的认证和授权。我阅读了教程,但无法理解所有内容。就像我如何使用我的同一个控制器进行身份验证,它如何使用 ADMIN_ROLE、USER_ROLE,我是否需要为这些角色创建一个表。我有很多与这个主题相关的困惑。到目前为止,我发现该教程很棒,但是我迷路了,需要可以帮助我的人。

4

1 回答 1

2

看看我的security.yml,我的用户如果想查看任何页面都必须登录(否则他们会重定向到登录表单)

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
    login:
        pattern:   ^/(login$|register|resetting) 
        anonymous: true                          
    main:
        pattern: ^/                      
        form_login:                      
            login_path: /login              
            check_path: /login_check            
            username_parameter: _login
            password_parameter: _password
        remember_me:
            key:         %secret%       
        anonymous:       false           
        provider:        main
        logout:          true            
        logout:
            path: /logout
            target: /

请注意用户名和密码参数,它们必须与登录表单的用户名和密码字段名称相同。

关于角色,我创建了一个与我的用户实体具有多对多关系的角色实体(表)。所以角色实体只是一个表,其中包含我的角色及其关系表的 ID。

希望我很清楚,我可以帮助你。

于 2012-04-23T14:05:05.683 回答