73116


Symfony2.3のシステムをSymfony3へアップデートし、動作を確認しております。  
システムにログインしようとした際、下記メッセージが出てログインができない状態です。  
このエラーが出る前に `csrf_token_generator: security.csrf.token_manager`
を他ページのエラー解決のためsecurity.ymlに追加したことが原因と考えられますが、どのように下記エラーを解決すべきか分からない状態です。  
解決策はありますか？

**Error message**

[code]

    Invalid CSRF token.
    
[/code]

**Code**

SecurityController.php

[code]

    /**
     * 入力画面
     *
     * @Route("/login")
     * @Template("AhiSpAdminBundle:Security:login.html.twig")
     */
    public function loginAction(Request $request)
    {
        // ログイン済はTOPへリダイレクト
        if ($this->get('security.authorization_checker')->isGranted('ROLE_HQ_MANAGE')) {
            return $this->redirect($this->generateUrl('ahi_sp_admin_hq_default_index', array(), UrlGeneratorInterface::ABSOLUTE_URL));
        } elseif ($this->get('security.authorization_checker')->isGranted('ROLE_SHOP_STAFF')) {
            return $this->redirect($this->generateUrl('ahi_sp_admin_shop_default_index', array(), UrlGeneratorInterface::ABSOLUTE_URL));
        }
    
        $session = $request->getSession();
    
        // ログインエラーがあれば、ここで取得
        if ($request->attributes->has(Security::AUTHENTICATION_ERROR)) {
            $error = $request->attributes->get(Security::AUTHENTICATION_ERROR);
        } else {
            $error = $session->get(Security::AUTHENTICATION_ERROR);
            $session->remove(Security::AUTHENTICATION_ERROR);
        }
    
        // エラーメッセージを取得
        $alertError = null;
        if ($error) {
            $alertError = $this->get('translator')->trans($error->getMessage());
        }
    
        return array(
            'last_username' => $session->get(Security::LAST_USERNAME),
            'alertError'    => $alertError,
        );
    }
    /**
     * スタッフをログイン状態にする
     *
     * @param Staff $staff スタッフエンティティ
     */
    public function autoLogin($staff)
    {
        $csrf_token = new UsernamePasswordToken($staff, $staff->getRawPassword(), 'secured_area', $staff->getRoles());
        $this->get('security.token_storage')->setToken($csrf_token);
    }
    
[/code]

login.html.twig

[code]

    {% extends 'AhiSpAdminBundle::layout.html.twig' %}
    
    {# contentTitle #}
    {% block contentTitle %}ログイン{% endblock %}
    
    {# contentBody #}
    {% block contentBody %}
        {# ログインフォーム #}
        <form method="post" action="{{ path('ahi_sp_admin_security_logincheck') }}" autocomplete="off" >
    
            {# TODO あとで修正する #}
            <table style="margin: 20px auto">
                <tr>
                    <td colspan="2" style="text-align:center;color:red;">{{ alertError | nl2br }}</td>
                </tr>
                <tr>
                    <td><label>ログインID</label></td>
                    <td><input type="text" id="username" name="_username" class="imeOff" value="{{ last_username }}"></td>
                </tr>
                <tr>
                    <td><label>パスワード</label></td>
                    <td><input type="password" id="password" name="_password"></td>
                </tr>
                <tr>
                    <td colspan="2" style="text-align:center"><button type="submit" class="btn"><i class="icon-signin"></i> ログイン</button></td>
                </tr>
                <tr>
                    <td colspan="2" style="text-align:center">
                        <a href="{{ path("ahi_sp_admin_security_passwordforgot") }}">※パスワードを忘れた場合</a>
                    </td>
                </tr>
            </table>
    
        </form>
    {% endblock %}
    
    
[/code]

security.yml

[code]

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false
    
        secured_area2:
            pattern:    ^/admin/sp/
            anonymous: ~
            form_login:
                login_path:  /admin/sp/login
                check_path:  /admin/sp/login_check
                csrf_token_generator: security.csrf.token_manager
                always_use_default_target_path: true
                default_target_path:            /admin/sp/
                target_path_parameter:          _target_path
                use_referer:                    false
    
            logout:
                path:   /admin/sp/logout
                target: /admin/sp/login
    
            remember_me:
                secret:      "%secret%"
                lifetime: 2592000 # 30 days in seconds
                path:     /
                domain:   ~ # Defaults to the current domain from $_SERVER
                always_remember_me: true
    
[/code]

**実行環境:**  
Cent OS 6.7  
PHP 5.6  
Symfony 3.0.9


CC BY-SA 4.0
2021-01-04T11:06:44.607
73066
2021-01-06T04:46:44.610
2021-01-05T00:49:33.867
3060
42407
question
php symfony
Invalid CSRF tokenのエラーでログインができない。


下記をlogin.html.twigに追加、OSの再起動で解決しました。  
`<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate')
}}">`


CC BY-SA 4.0
2021-01-06T04:46:44.610
73116
2021-01-06T04:46:44.610
42407
73066
answer