2017-04-14 10 views
1

私はカスタムメンバーシステムを持っています:Yii2 Members System。詳細については、それを参照するか、インストールしてこの質問に取り組むことができます。Yii2 Advanced - フロントエンドとメインサイト間のセッションを共有する(wwwのフロントエンドの複製)

私はYii2がbackendが管理モデルで動作し、adminテーブルから引っ張るようにセッション/クッキーを分離するために、いくつかの修正を加えて、提供して同じようにfrontendbackendを持っています。古い伝統的なメンバーシステムと同様です。

mainsiteは、基本的にfrontendのクローンであり、その役割はメインのウェブサイトです。 www.site.comまたはsite.comに行くと何が得られますか?

  • mainsite = www.site.com又はsite.com
  • フロントエンド = users.site.com
  • バックエンド:ここ

    3つのアプリとその例ドメインであります = admin.site.com

ユーザがログインすると(users.site.com/site/login)、ホームページに戻る(mainsitewww.site.com)ユーザー名を表示してログインしていることを知りたい。フロントエンドがデフォルトで高度なアプリからどのように動作するかと同じように。

これまでの記事から、ログインしてメインサイトに戻り、ちょうどAn internal server error occurred.と読みます。それはYiiエラーのように見えませんが、サーバーエラーですか?私は、実行時の下のYiiログで見てみると、それは、アクセス制御を言及:

ここ
2017-04-14 13:38:25 [127.0.0.1][1][-][error][yii\web\HttpException:403] exception 'yii\web\ForbiddenHttpException' with message 'You are not allowed to perform this action.' in /Applications/XAMPP/xamppfiles/htdocs/yii2-members-system/vendor/yiisoft/yii2/filters/AccessControl.php:151 

は私のconfigsの一部です。

mainsite /設定/ main.php

'components' => [ 
    'assetManager' => [ 
     'bundles' => false, 
    ], 
    'request' => [ 
     'csrfParam' => '_csrf-mainsite', 
    ], 
    'user' => [ 
     'class' => 'common\components\User', 
     'identityClass' => 'common\models\User', 
     'enableAutoLogin' => true, 
     'identityCookie' => [ 
      'name' => '_identity-frontend', 
      'httpOnly' => true, 
      'domain' => '.yii2-members-system.dev', 
     ], 
    ], 
    'session' => [ 
     'name' => 'advanced-frontend', 
     'cookieParams' => [ 
      'domain' => '.yii2-members-system.dev', 
      'httpOnly' => true, 
     ], 
    ], 
    'urlManager' => [ 
     'enablePrettyUrl' => true, 
     'showScriptName' => false, 
     'rules' => [ 
     ], 
    ], 
], 

フロントエンド/設定/ main.php

'components' => [ 
    'assetManager' => [ 
     'bundles' => false, 
    ], 
    'request' => [ 
     'csrfParam' => '_csrf-frontend', 
    ], 
    'user' => [ 
     'class' => 'common\components\User', 
     'identityClass' => 'common\models\User', 
     'enableAutoLogin' => true, 
     'identityCookie' => [ 
      'name' => '_identity-frontend', 
      'httpOnly' => true, 
      'domain' => '.yii2-members-system.dev', 
     ], 
    ], 
    'session' => [ 
     'name' => 'advanced-frontend', 
     'cookieParams' => [ 
      'domain' => '.yii2-members-system.dev', 
      'httpOnly' => true, 
     ], 
    ], 
    'urlManager' => [ 
     'enablePrettyUrl' => true, 
     'showScriptName' => false, 
     'rules' => [ 
     ], 
    ], 
], 

バーチャルホスト

<VirtualHost *:80> 
    ServerName yii2-members-system.dev 
    ServerAlias yii2-members-system.dev 
    DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs/yii2-members-system/mainsite/web" 
    ErrorLog "logs/mainsite.yii2-members-system.dev-error_log" 
    CustomLog "logs/mainsite.yii2-members-system.dev-access_log" common 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName yii2-members-system.dev 
    ServerAlias admin.yii2-members-system.dev 
    DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs/yii2-members-system/backend/web" 
    ErrorLog "logs/admin.yii2-members-system.dev-error_log" 
    CustomLog "logs/admin.yii2-members-system.dev-access_log" common 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName yii2-members-system.dev 
    ServerAlias users.yii2-members-system.dev 
    DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs/yii2-members-system/frontend/web" 
    ErrorLog "logs/users.yii2-members-system.dev-error_log" 
    CustomLog "logs/users.yii2-members-system.dev-access_log" common 
</VirtualHost> 
+0

これはYii2テンプレートを選択するのが悪い例だと思います。なぜ高度なテンプレートですか?良いYii2の基本テンプレート+モジュールですか?これで、Yii-basic-templateでもっと速くできるのです。セッション、クッキーなどの分離が必要な場合は、Advancedが選択されます – Rafal

+0

メインウェブサイト、ユーザーダッシュボード、管理ダッシュボード、api、メーラーなど各セグメントが完全に分離されているため、各セクションはすべてのセグメントから独立して90%他人。管理ダッシュボードで何かが壊れても、通常はユーザーダッシュボードには影響しません。ユーザーと管理者コードの分離が深ければ、セキュリティが向上します。 - 管理テーブルにアクセスできるデータベースに対して、別のユーザーを使用してadmin( 'backend')アプリケーションを使用することができます。だからあなたが悪用された場合、ユーザーセクションのadminテーブルを混乱させることはできません。 –

答えて

1

サブドメインまたはメインドメイン間でセッションを共有できます。 yiiの設定では、のフロントエンド/ config/main.phpメインサイト/ config/main.phpに以下のように設定する必要があります。この構成では

'request' => [ 
    'csrfParam' => '_csrf-app', 
], 
'user' => [ 
    'identityClass' => 'common\models\User', 
    'enableAutoLogin' => true, 
    'identityCookie' => ['name' => '_identity', 'httpOnly' => true, 'domain'=>'.yii2-members-system.dev', 'path'=>'/'], 
], 
'session' => [ 
    'name' => 'sessionName', 
    'savePath'=> __DIR__ . '/../../sessionTmp' 
], 

は、セッション名は、セッションが2つのYiiアプリケーションの間でセッションを共有するために、他のサブドメインと一致している必要があり、パス、アイデンティティクッキーのパスおよびドメインを保存します。

アプリ内に1つのtmpフォルダを作成し、セッション保存パスを指定します。上記のように。

私はこれが役に立ちます。

+0

ありがとう、しかし私はそれを働かせました。問題は私の 'mainsite'でした(通常はメインのウェブサイトのホームページのようにゲスト用でした)。AccessControlでゲストに許可することができました。Lol duh、彼らは'フロントエンド 'とログインするとゲストではありません。したがって、私はゲストではなかったのでアクセスルールを満たしませんでした。その行を削除し、それがうまくいった。 ---ところで、あなたは 'path'や' savePath'を設定する必要はありません。上記の設定はうまくいきます。 –

関連する問題