Symfony身份验证:我无法通过本地服务器上现有Symfony项目的登录页


Symfony Authentication: I cannot pass the Login Page of an existing symfony project on my local server

我很难通过已经存在的Symfony项目的登录页面。我遵循了这里规定的流程,但我在传递登录页面时仍然存在问题,甚至没有给我任何错误或任何东西。它只是不断地将我重定向到同一个登录页面。

此外,在apps/log/dev.log文件中也没有写入任何错误。我可以看到,每次我试图通过localhost上的数据库phpMyAdmin访问网站时,都会创建会话。

这是我的app/config/config.yml文件

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: services.yml }
    - { resource: easy.yml }
framework:
    #esi:             ~
    #translator:      { fallback: %locale% }
    secret:          %secret%
    router:
        resource: "%kernel.root_dir%/config/routing.yml"
        strict_requirements: %kernel.debug%
    form:            true
    csrf_protection: true
    validation:      { enable_annotations: true }
    templating:      { engines: ['twig'], assets_version: v32 }
    default_locale:  %locale%
    trust_proxy_headers: false
twig:
    debug:            %kernel.debug%
    strict_variables: %kernel.debug%
    globals:
        applicationUrl: http://10.50.1.39:8080/Performance/web/app_dev.php
    form:
        resources:
            - AppraisalAdminBundle:Form:label.html.twig
            - AppraisalAdminBundle:JobPosition:business_unit_department_multiple.html.twig
            - AppraisalAdminBundle:FunctionalRole:business_unit_department_single.html.twig
            - AppraisalAdminBundle:FunctionalRole:app_functional_role_position.html.twig
            - AppraisalAdminBundle:FunctionalRole:app_functional_role_position_fixed.html.twig
            - AppraisalAdminBundle:Employee:app_employee_job.html.twig
            - AppraisalAdminBundle:Skill:app_skill_applied.html.twig
            - AppraisalAdminBundle:JobFunction:app_job_function.html.twig
            - AppraisalAdminBundle:Job:app_job_filter.html.twig
            - AppraisalAdminBundle:Job:app_job_all_filter.html.twig
            - AppraisalAdminBundle:Competency:app_competency_area.html.twig
            - AppraisalAdminBundle:Competency:app_competency_filter.html.twig
            - AppraisalAdminBundle:Form:datepicker.html.twig
            - AppraisalAdminBundle:DepartmentObjective:app_goal.html.twig
            - AppraisalAdminBundle:DepartmentObjective:app_goal_filter.html.twig
            - AppraisalAdminBundle:DepartmentObjective:app_department_multiple.html.twig
            - AppraisalAdminBundle:CompetencyObjective:app_competency_objective_type.html.twig
            - AppraisalAdminBundle:CompetencyObjective:app_competency_objective.html.twig
            - AppraisalAdminBundle:Kpi:app_kpi_type.html.twig
            - AppraisalAdminBundle:AppraisalForm:app_appraisal_form_filter.html.twig
            - AppraisalAdminBundle:AppraisalCycle:app_appraisal_cycle_business_unit_department.html.twig
            - AppraisalAdminBundle:Form:app_attachment.html.twig
swiftmailer:
    encryption: tls
    auth_mode:  login
    host:       mail.ipnxnigeria.net
    username:   perfmgt@ipnxnigeria.net
    password:   ipnx
    spool:
        type: file
        path: "%kernel.root_dir%/spool"
doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        dbname:   "%database_name%"
        port:    "%database_port%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:    UTF8

这是我的app/config/security.yml文件

security:
    encoders:
       Symfony'Component'Security'Core'User'User: plaintext
#        Appraisal'AdminBundle'Business'User'UserSession: sha512
    providers:
        AppSecurityBundleUserProvider:
            id: app_user_provider
#       default_provider:
#            memory:
#                users:
#                    admin: { password: kitten, roles: 'ROLE_ADMIN' }
    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false
        login:
            pattern:  ^/Admin/Login/ShowLogin
            security: false
        secured_area:
            pattern:    ^/
            form_login:
                check_path: /Admin/Security/LoginCheck
                login_path: /Admin/Login/ShowLogin
                username_parameter: username
                password_parameter: password
                always_use_default_target_path: true
                default_target_path: /Admin/Default/
            logout:
                path:   /Admin/Security/Logout
                target: /Admin/Login/ShowLogin
    access_control:
        - { path: ^/Admin/Profile/, roles: [ROLE_ADMIN, ROLE_APPRAISER, ROLE_APPRAISEE] }
        - { path: ^/Admin/Default/, roles: [ROLE_ADMIN, ROLE_APPRAISER, ROLE_APPRAISEE] }
        #- { path: ^/Admin/AppraiserObjectiveSetting/, roles: [ROLE_ADMIN, ROLE_APPRAISER] }
        #- { path: ^/Admin/Appraisee/, roles: [ROLE_ADMIN, ROLE_APPRAISER] }
        - { path: ^/Admin/, roles: [ROLE_ADMIN] }

这是我的LoginController.php文件

<?php
namespace Appraisal'AdminBundle'Controller;
use Symfony'Bundle'FrameworkBundle'Controller'Controller;
use Symfony'Component'HttpFoundation'Response;
use Sensio'Bundle'FrameworkExtraBundle'Configuration'Route;
use Appraisal'AdminBundle'Business;
use Symfony'Component'Security'Core'SecurityContext;
/**
 *@Route("/Login")
 */
class LoginController extends Controller
{
    /**
     * @Route("/ShowLogin/",  name="Appraisal_Login_ShowLogin")
     */
    public function ShowLoginAction() {
        $request = $this->getRequest();
        $session = $request->getSession();
        $formErrors = array();
        if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
            $formError = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
        } else {
            $formError = $session->get(SecurityContext::AUTHENTICATION_ERROR);
            $session->remove(SecurityContext::AUTHENTICATION_ERROR);
        }        
        $data = array(
            'form_url' => $this->generateUrl('Security_LoginCheck'),
            'form_error' => $formError
        );
        return $this->render('AppraisalAdminBundle:Login:LoginPage.html.twig', $data);
    }
}

这是我的Login.html.twig视图

<html>
<head>
    <title>{{ title | default('Appraisal System')}}</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    {% block header %}
    
    <link rel="stylesheet" type="text/css" href="{{ asset('bundles/designjeasyui/jquery-easyui/themes/default/easyui.css') }}">
    <link rel="stylesheet" type="text/css" href="{{ asset('bundles/designjeasyui/jquery-easyui/themes/icon.css') }}">
    <link rel="stylesheet" type="text/css" href="{{ asset('bundles/designjeasyui/style.css') }}">
    
    <script type="text/javascript" src="{{ asset('bundles/designjeasyui/jquery-easyui/jquery-1.8.0.min.js') }}"></script>
    <script type="text/javascript" src="{{ asset('bundles/designjeasyui/jquery-easyui/jquery.easyui.min.js') }}"></script>
    <script type="text/javascript" src="{{ asset('bundles/designjeasyui/general.js') }}"></script>
    <script type="text/javascript">
        function switchPage(pageTitle, pageHref) {
            var centerPanel = jQuery('#main').layout('panel', 'center');
            centerPanel.panel('setTitle', pageTitle);
            centerPanel.panel('refresh', pageHref);
        }
    </script>
    {% endblock %}
</head>
<body>
    <div id="topBanner">
        {% block topBanner %}
            <img src="{{ asset('bundles/designjeasyui/images/company-logo.jpg')}}" height="58px" />
        {% endblock %}        
    </div>
    <div class="easyui-layout" id="main" style="height:550px;margin-left: 10px; margin-right: 10px;">  
        <div id="content" region="center">
            <div id="LoginDialog" class="easyui-dialog" title="Login" style="width:500px;height:200px"
                closable="false">  
                <form id="LoginForm" class="stdform" method="post" action="{{ form_url }}">
                    <p>
                        <label>Email</label>
                        <span class="field">
                            <input type="textbox" name="username" style="width: 180px"/>
                        </span>
                    </p>
                    <p>
                        <label>Password</label>
                        <span class="field">
                            <input type="password" name="password" style="width: 180px"/>
                        </span>
                    </p>
                    <p>
                        <label></label>
                        <span class="field">
                            <label for="selection" class="error" style="margin-top: 5px; width: 50%">
                                {% if form_error is not empty %}Login failed{% endif %}
                            </label>
                        </span>
                    </p>
                    <p class="stdformbutton" id="LoginForm_submit_button_p">
                        <a class="easyui-linkbutton" iconCls="icon-ok" href="javascript:submitForm('LoginForm')">
                            <span>Login</span>
                        </a>
                    </p>
                    <p class="stdformbutton" style="display: none" id="LoginForm_submit_ajax_loader">
                        <a class="ajax-loader"></a>
                    </p>
                </form>                                            
            </div> 
        </div>
    </div>
    <div style="margin-left: 10px; margin-right: 10px;">
        <div style="margin-left: auto; margin-right: auto; width: 300px; margin-top: 10px">
            <b style="font-size: 11px">Powered by </b> <img src="{{ asset('bundles/designjeasyui/images/footer-logo.jpg')}}" height="20px" />    
        </div>
    </div>  
</body>
</html>

我已经检查了.htaccess文件和web根目录,已经进行了检查,但我不知道该怎么办。我需要在捆绑包中进行一些更改,但我无法登录。

根据您提供的从web服务器将Symfony2站点转移到localhost的链接,步骤2显示:

2)从实时Web服务器导出数据库,并将其导入本地主机。这可以使用PhpMyAdmin完成

您是否使用PhpMyAdmin检查了数据库是否正确导入?(或终端中的MySQL)

我已经出现了"无法退出登录页面"的错误,而且发生在我身上的次数是因为我忘记运行我的Doctrine Fixtures。忘记运行我的Fixture导致没有将我的"标准"用户插入数据库,所以我无法登录。

也许你也有类似的错误:)

验证你的/app/config/parameters.yml,并检查数据库名称、用户和密码是否正确。它们应该是您的用户所在的数据库(请参阅终端中的PhpMyAdmin或or MySQL),以及您用于PhpMyAdmin/MySQL 的用户和密码

谢谢Victor。问题是,我最初是在windows平台上(使用wamp服务器)构建web应用程序的,我试图在ubuntu(lamp服务器)上重新打开它,但没有成功。我忘了,最初在windows上构建的网络应用程序可能无法在任何其他操作系统平台上运行,但在Ubuntu(或类似linux的平台)上构建的web应用程序可以在包括windows在内的任何其他平台上运行。让我们注意一下。