2017-11-12 6 views
0

私の問題はタイトルに似ています。

は私のプロジェクトでは、I /ログインおよび/管理ルートにHTTPSを追加しようとしました。両方のルートは、サードパーティのバンドルからインポートされます。FOSUserBundleからのログインとEasyAdminBundleからのログイン。これを達成するために、このスレッドhttps://symfony.com/doc/current/security/force_https.htmlで説明されているように、をsecurity.ymlファイルに追加しました。
マイaccess_controlセクションでは、ように見えた:symfonyのdevとprodバージョンでHTTPSを無効にするか、HTTPに変更するには?

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } 
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin/, role: ROLE_ADMIN, requires_channel: https } 


私はそれがhttps接続を強制し、それがあったかどうかを確認するために、組み込みのサーバーを経由してサイトを開始しました。 symfony組み込みサーバはSSL接続をサポートしていないが、アドレスバーにはhttps://があったので、明らかにエラーがあった。私は、サーバーへのこのバージョンをアップロードし、私は次の機能に作業を継続したかったので、私はrequires_channelエントリを削除したが、私は、ブラウザのアドレスバーにphp bin/console server:start 0.0.0.0:80とタイピングを入力してページを起動するときlocalhost/admin交響曲はまだHTTPSを強制します。私の次の推測はrequires_channel: httpsrequires_channel: httpに変更することでしたが、それもうまくいきませんでした。
プロダクションサーバでも同じことが起こります。つまり、requires_channelが削除された場合やHTTPに設定されている場合でもHTTPSが強制されますが、最終的に証明書を生成してapache設定ファイルでSSL接続を開始する必要があるため、私はdevのバージョンで動作することはできません。

私は同様の問題を探しましたが、主にスレッドがsymfonyとHTTPまたはHTTPSに関するものだった場合、人々はHTTPSを強制する方法を尋ねますが、これは既に行いました。私は似たような問題を見つけることができませんので、誰かが間違って何が起こったのか分かりません。もし誰かが私の問題を解決したか、非常によく似たリンクを貼り付けてください。


security.ymlファイルの全内容:問題はdev内変えないで

security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: bcrypt 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SUPER_ADMIN: ROLE_ADMIN 

    providers: 
     fos_userbundle: 
      id: fos_user.user_provider.username_email 

    firewalls: 
     main: 
      pattern: ^/ 
      form_login: 
       provider: fos_userbundle 
      logout:  true 
      anonymous: true 

    access_control: 
     - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: "%router.request_context.scheme%" } 
     - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin/, role: ROLE_ADMIN, requires_channel: "%router.request_context.scheme%" } 

答えて

0

は、最後に私は私の問題の解決策を見つけることができました。

私はsymfonyキャッシュをクリアしていましたが、システムキャッシュとブラウザキャッシュに何らかのデータがあると思っていましたが、まだloginadminルートに強制的にいくつかの強制がありました。

私が行ったことは、BleachBitを使用してすべての可能なキャッシュをクリアすることです。

ありがとうございます。

0

- symfonyのキャッシュをクリア。

https://を選択するかどうかは、 "%parameter%"を使用してみてください。もちろん、routing.ymlファイル - schemes: ["%httpProtocol%"]、parameters.yml.distファイルで設定されています。それはライブ/プロダクションで 'https' `です。

+0

こんにちは、返信ありがとうございます。私は 'php bin/console cache:clear 'でキャッシュをクリアしようとしましたが、手動で' var/cache'フォルダからファイルを削除しようとしましたが、80以外のすべてのポートで動作します。 :// '。 – Safk

0

アリスターBulmanの答えを拡張する。

symfonyアプリケーション全体が正しいスキームを持つように、 'router.request_context.scheme'パラメータを使用してください。

最終的な結果は次のようになります。

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: "%router.request_context.scheme%" } 
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin/, role: ROLE_ADMIN, requires_channel: "%router.request_context.scheme%" } 

また、あなたのルートにスキームを追加します。

main: 
    type: annotation 
    schemes: "%router.request_context.scheme%" 
    resource: '../src/Application/Controller/' 
+0

こんにちは、あなたの解決策を試してみました。ブラウザのアドレスバーに 'localhost/admin'と入力したとき、つまり' php bin/console server:start 0.0.0.0:80'を実行したときだけ 'https:// '私は '0.0.0.0'をアドレスバーに入力するとうまく動作し、' localhost/login'でも 'https:// 'は強制されませんが' localhost/admin'は 'https://'を強制します。私はIPアドレスの使用を開始することができましたが、私は 'localhost'を使用していました。さらに、他のsymfonyプロジェクトで 'localhost/admin'が強制的に' https:// 'になっていることに気付きました。 – Safk

+0

管理ルートに「スキーム」も追加しましたか? – Airoude

+0

はい、 'https'は引き続き' localhost/admin'にあります。 symfonyには、特定のルート上の 'http'に適切にリセットされていないグローバル変数があるかもしれないと思っていました。これは全く新しいプロジェクトでは' localhost/admin'と同じ問題があることです。 – Safk

関連する問題