簡體   English   中英

Yii2:是否可以從后端打開前端會話?

[英]Yii2: Is it possible to open a frontend session from backend?

我此刻與yii2斗爭。 以下場景:

我使用yii2高級模板,並有一個前端和一個后端,具有單獨的用戶表和登錄。

現在我正在尋找一種后端用戶可以從后端作為前端用戶登錄的方式。 假設您在后端並查看前端用戶,您可以單擊“以此用戶身份登錄”。

這種情況可能嗎?

我試圖在后端的配置中配置前端使用:

'user' => [
         'identityClass' => 'backend\models\BackendUser',
         'enableAutoLogin' => false,
 ],
 'frontendUser' => [
        'class' => 'yii\web\User',
        'identityClass' => 'common\models\User',
        'enableAutoLogin' => false,
  ],

在我的控制器中我嘗試了這個:

if (Yii::$app->frontendUser->login($user_group->user, 0)) {
    return $this->redirect(Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/index', 'client' => $client->login_address]));
}

謝爾蓋回答后編輯:

后端配置

'user' => [
            'identityClass' => 'backend\models\BackendUser',
            'enableAutoLogin' => true,
            'identityCookie' => [
                'name' => '_backendUser', // unique for backend
            ]
        ],

前端配置:

'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
            'loginUrl' => ['message/welcome'], // weil beim SessionTimeout darauf umgeleitet wird,
            'authTimeout' => 1800,
            'identityCookie' => [
                'name' => '_frontendUser', // unique for frontend
            ]
        ],

控制器功能:

public function actionLoginAs($id)
    {
        $user_group = UserGroup::findOne($id);
        if (is_null($user_group)) {
            return $this->redirect(['site/index']);
        }

        $group = $user_group->group;
        $client = $group->client;

        $yiiuser = new yii\web\User([
                'identityClass' => 'common\models\User',
                'identityCookie' => [
                        'name' => '_frontendUser', // unique for frontend
                ]
        ]);
        $user = $user_group->user;

        if ($yiiuser->login($user, 15 * 60)) {
            return $this->redirect(Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/index', 'client' => $client->login_address]));
        }

    }
  1. 你必須separete auth cookie名稱:

前端

'user' => [
  'identityClass' => 'common\models\User',
  'enableAutoLogin' => true,
  'identityCookie' => [
  'name' => '_frontendUser', // unique for frontend
  ]
],

后端

'user' => [
  'identityClass' => 'backend\models\BackendUser',
  'enableAutoLogin' => true,
  'identityCookie' => [
  'name' => '_backendUser', // unique for backend
  ]
],

實際上是單獨的前端和后端用戶

  1. 我認為你必須在后端創建方法,如admin/auth/loginUser

AuthController

public function actionLoginUser($login) {
    // check admin is loggin in
    $yiiuser = new yii\web\User([
        'identityClass' => 'common\models\User',
        'identityCookie' => [
            'name' => '_frontendUser', // unique for frontend
        ]
    ]);
    $user = common\models\User::findByUsername($login);
    // check user exists
    $yiiuser->login($user, false, 15 * 60); // 15 min
    return $this->redirect('/');
}

在后端:

public function actionLogin($id)
{
  ///find customer by id
  $customer = $this->findModel($id);
  //generate new access token to admin for login
  $auth_key = $customer->generateAuthKey();
  //save customer model changes  
  $customer->save();
  //make url for login in frontend
  $url = Yii::$app->params['frontendUrl'] . '/site/magic-login?k='.$auth_key;
  return $this->redirect(Yii::$app->params['frontendUrl'] . '/site/magic-   login?k='.$auth_key);
 }

在forntend:

public function actionMagicLogin()
{
   //logout logged user
   Yii::$app->user->logout();

   //find customer by access token
   $customer = Customer::findIdentityByAccessToken($_GET['k']);
   //login customer and make sessions
   if (Yii::$app->user->login($customer))
   {
     //expire access token
     $customer->generateAuthKey();
     //redirect to show customer  dashboard
     $this->redirect(['customer/account']);
   }
   else
   {
      //if login faild redirect to login page
      return $this->render('login');
    }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM