猿问

Yii2-usuario:扩展登录过程

使用 Yii2-usuario,我想通过在用户成功登录后设置一些会话变量来扩展登录过程。


我尝试通过以下方式扩展用户模型:


替换中的 User 类./config/web.php:


'modules' => [

    'user' => [

        'class' => Da\User\Module::class,

        'classMap' => [

            'User' => app\models\user\User::class,

        ],

    ],

],

并重载User类./models/users/User.php:


namespace app\models\user;

use Da\User\Model\User as BaseUser;


class User extends BaseUser

{

    public function login(IdentityInterface $identity, $duration = 0)

    {

        $ok = parent::login();

        myNewFeature();

        return $ok;

    }

}

如文档中所述。


但是:login()当用户登录时,这个函数永远不会被执行。


我怎样才能使这项工作?


小唯快跑啊
浏览 152回答 1
1回答

DIEA

最好的方法是利用扩展提供的事件。如果您查看FormEvents,您会在SecurityController标题下看到以下内容FormEvent::EVENT_BEFORE_LOGIN: 在用户登录系统之前发生FormEvent::EVENT_AFTER_LOGIN:在用户登录系统后发生所以你需要做的是定义一个事件并在那里添加你的代码,文档说events.php在你的config文件夹中创建一个命名的文件,然后将它加载到你的入口脚本中。以下是为 设置事件的示例SecurityController:<?php&nbsp;// events.php fileuse Da\User\Controller\SecurityController;use Da\User\Event\FormEvent;use yii\base\Event;Event::on(SecurityController::class, FormEvent::EVENT_AFTER_LOGIN, function (FormEvent $event) {&nbsp; &nbsp; $form = $event->getForm();&nbsp; &nbsp; // ... your logic here});然后最后一部分是在你的入口脚本中加载这个文件<?phpdefined('YII_DEBUG') or define('YII_DEBUG', true);defined('YII_ENV') or define('YII_ENV', 'dev');require(__DIR__ . '/../../vendor/autoload.php');require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');require(__DIR__ . '/../../common/config/bootstrap.php');require(__DIR__ . '/../config/bootstrap.php');require(__DIR__ . '/../config/events.php'); // <--- adding events here! :)$config = yii\helpers\ArrayHelper::merge(&nbsp; &nbsp; require(__DIR__ . '/../../common/config/main.php'),&nbsp; &nbsp; require(__DIR__ . '/../../common/config/main-local.php'),&nbsp; &nbsp; require(__DIR__ . '/../config/main.php'),&nbsp; &nbsp; require(__DIR__ . '/../config/main-local.php'));$application = new yii\web\Application($config);$application->run();
随时随地看视频慕课网APP
我要回答