Yii2 - 模块登录基本应用程序模板

时间:2016-04-06 19:26:49

标签: yii2

使用"基本"应用程序模板,设置与主站点登录分开的模块登录的正确方法是什么?

例如,我有一个" admin"需要登录的模块。我还需要用户登录主站点。

我做了以下事情:

  1. 使用admin工具
  2. 创建gii模块
  3. models模块文件夹
  4. 中创建了admin文件夹
  5. 在此文件夹中放置LoginForm.phpUser.php(还更新了这些文件中的命名空间声明)
  6. AccessControl
  7. 添加了modules\admin\controllers\DefaultController.php行为和登录/退出操作
  8. 更新config\web.php如下:

    'modules' => [
        'admin' => [
            'class' => 'app\modules\admin\Module',
        ],
    ],
    
  9. 更新app\modules\admin\Module.php如下:

    public function init()
    {
        parent::init();
    
        Yii::$app->set('user', [
            'class' => 'yii\web\User',
            'identityClass' => 'app\modules\admin\models\User',
            'enableAutoLogin' => true,
            'loginUrl' => ['admin/default/login'],
        ]);
    
        Yii::$app->set('session', [
            'class' => 'yii\web\Session',
            'name' => '_adminSessionId',
        ]);
    }
    
  10. 我遇到的问题是,如果我在未登录时尝试访问管理页面,则会显示登录表单(这是正确的)。但是在登录时,它只是将我重定向回主站点。它应该将我重定向到我试图访问的管理页面。

    DefaultController.php中,它具有以下(默认代码):

    if ($model->load(Yii::$app->request->post()) && $model->login())
        return $this->goBack();
    

    这样做的正确方法是什么,以便我可以为管理模块和主站点进行独立登录?我不想使用"高级应用程序模板"因为这增加了一些不必要的复杂性。

4 个答案:

答案 0 :(得分:1)

用户组件允许您设置returnUrl,getter解释为:This method reads the return URL from the session. It is usually used by the login action which may call this method to redirect the browser to where it goes after successful authentication.

推荐:在处理数据之前,请通过调用Yii::$app->user->setReturnUrl(Url::current());来设置returnUrl(这将存储用户在会话中使用的页面,此外,您可以使用{来操作GET参数在将它传递给会话之前{1}},让框架发挥其魔力。

不推荐:处理完数据后,您可以依赖引荐来源(在某些情况下无效) Url::current()或者代替goHome基本上重定向到可以在模块初始化期间设置的app-> homeUrl,你可以说return Yii::$app->request->referrer ? $this->redirect(Yii::$app->request->referrer) : $this->goHome();

我建议在模块初始化期间设置$this->redirect('your/admin/index');,因为您可能还需要其他功能,Yii2也将其用作某些重定向的“后备”。

答案 1 :(得分:1)

最好的方法是在admin模块中创建新控制器,该控制器应具有登录,注销操作。 因为将来您可能会添加一些额外的逻辑。

在该登录操作中,您可以使用相同的LoginForm。

您可以在该登录操作中指定重定向网址。

管理模块类可能如下所示:

namespace app\modules\admin;

class Module extends \yii\base\Module
{
    public $layout = 'main';

    public $defaultRoute = 'main/index';

    public function init()
    {
        parent::init();

        Yii::$app->errorHandler->errorAction = '/admin/main/error';
        Yii::$app->user->loginUrl = '/admin/main/login';
        .....

    }
}

答案 2 :(得分:0)

如果尚未设置用户的goBack(),则

homeUrl默认为returnUrl

为什么不直接重定向?

if ($model->load(Yii::$app->request->post()) && $model->login())
    return $this->redirect(['myadminmodule']);

答案 3 :(得分:0)

转到config / web.php并将其添加到组件

'backendUrlManager'=>[
        'class' => 'yii\web\urlManager',
        'enablePrettyUrl'=>true,
        'showScriptName'=>false,
        'baseUrl'=>'/admin',
    ],

在DefaultController.php中,它具有以下(默认代码):

if ($model->load(Yii::$app->request->post()) && $model->login())

返回Yii :: $ app-> getResponse() - >重定向(Yii :: $ app-> backendUrlManager-> baseUrl);