J'ai un système de membre personnalisé que j'ai fait: Yii2 Members System. Vous pouvez vous référer à cela pour tous les détails, ou l'installer pour que vous puissiez travailler avec cette question.Yii2 Advanced - Partager la session entre frontend et mainsite (duplicata de frontend pour www)
Je frontend
et backend
comme Yii2 fournit, avec quelques modifications pour séparer les sessions/cookies qui backend
fonctionne avec le modèle d'administration et tire d'une table admin
. Similaire aux anciens systèmes de membres traditionnels.
mainsite
est fondamentalement un clone de frontend
et son rôle est d'être le site principal. Ce que vous obtenez quand vous allez à www.site.com
ou site.com
.
Voici les 3 applications et leurs domaines d'exemple:
- mainsite = www.site.com ou site.com
- frontend = users.site.com
- back-end = admin.site.com
Lorsqu'un utilisateur se connecte ()) et revenir à la page d'accueil (mainsite
at www.site.com
) Je veux qu'il sache qu'ils sont connectés et affichent leur nom d'utilisateur. Tout comme le fonctionnement de frontend par défaut depuis l'application avancée. De ce que j'ai jusqu'ici, je me connecte et me dirige vers le site principal et il lit juste An internal server error occurred.
. Cela ne ressemble pas à une erreur Yii, mais à une erreur de serveur? Quand je regarde dans les journaux Yii sous exécution, il mentionne le contrôle d'accès:
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
Voici quelques-unes de mes configs.
mainsite/config/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' => [
],
],
],
frontend/config/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' => [
],
],
],
vhosts
<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>
Je pense que c'est un exemple mauvais choisir le modèle Yii2. Pourquoi un modèle avancé? peut-être mieux Yii2 modèle de base + modules? C'est tout ce que vous pourriez faire plus rapidement avec Yii-basic-template. Advanced est choisi lorsque les sessions, les cookies, etc séparation est nécessaire – Rafal
Parce que cela sépare complètement chaque segment: site Web principal, tableau de bord de l'utilisateur, tableau de bord administrateur, API, mailer, etc etc ... Il permet à chaque section de fonctionner 90% indépendant de tous les autres. Si je casse quelque chose dans le tableau de bord d'administration, cela n'affecte généralement pas le tableau de bord de l'utilisateur. Le plus de séparation entre l'utilisateur et le code d'administrateur, le mieux pour la sécurité. - Vous pourriez avoir l'application admin ('backend') en utilisant un autre utilisateur pour la base de données qui a accès à la table d'administration. Donc, si votre exploité, ils ne peuvent pas jouer avec la table d'administration de la section de l'utilisateur. –