https://github.com/dektrium/yii2-user

安装 : composer require "dektrium/yii2-user:0.9.*@dev"

配置 :  'modules' => [ 'user' => [ 'class' => 'dektrium\user\Module', ], ], 添加到config/web.php

注意  : 确保配置文件中没有别的 user 组件  如果 components 中有 user 的配置 注释掉

如果你需要自定义组件  可以:

 'modules' => [
         'user' => [
             'class' => 'app\compoents\User',
             'identityClass' => 'dektrium\user\Models\User',
        ],
 ],             

 

生成数据库 : yii migrate/up --migrationPath=@vendor/dektrium/yii2-user/migrations

migration,

profile,

social_account,

token, user

配置信息:

  enableFlashMessages 【默认为true】若为false 要自定义 提示信息 组件

  enableRegistration 【true】是否开启注册功能

  enableGeneratingPassword 【false】 不准用户自己输入密码 自动生成后通过邮件发送

  enableConfirmation【true】 是否 要邮件验证

  enableUnconfirmedLogin【false】邮件未验证 能不能登录

  enablePasswordRecovery 【true】 用户能不能找回密码

  emailChangeStrategy【STRATEGY_DEFAULT 】修改邮箱时 用那种策略:

    \dektrium\user\Module::STRATEGY_DEFAULT 发送给新的邮箱 并点击确认链接

    \dektrium\user\Module::STRATEGY_INSECURE 修改邮箱 不另行通知

    \dektrium\user\Module::STRATEGY_SECURE 发送给新的 和旧的邮箱 都要点击确认链接

   confirmWithin【86400(24小时)】令牌过期时间(秒)过期必须刷新页面

  rememberFor【1209600(两周)】 记住用户的过期时间时间(秒)

  recoverWithin【21600(6小时)】 在令牌过期前的规定时间内(秒) 要重新请求

  admins 【[]】 能操作 用户管理页面 的用户们的用户名列表

  adminPermission【null】 为用户指定RBAC权限的页面 最高权限 和 有此权限的用户可以操作

  cost 【10】 生成hash值参数的位数 位数越高越能防御暴力攻击

  urlPrefix  【user】 此模块的url前缀 如果设置为 auth ,auth/login, auth/admin, auth/register

  urlRules 【[]】 URL 管理规则 ???

可用的动作:

  • /user/registration/register 注册表单
  • /user/registration/resend 发送表单
  • /user/registration/confirm 确认 (需要id and token 参数)
  • /user/security/login 登录表单
  • /user/security/logout 退出登录 (仅支持post)
  • /user/recovery/request ???
  • /user/recovery/reset 重置密码 (需要id and token 参数)
  • /user/settings/profile  个人资料设置??
  • /user/settings/account 账号设置 (email, username, password)
  • /user/settings/networks 第三方账号登录
  • /user/profile/show 显示用户头像?? (需要id 参数)
  • /user/admin/index 用户管理界面
  • /user/admin/create 创建用户
  •  /user/admin/update 修改用户
  • /user/admin/delete 删除用户

你可以重写 类 和 添加 行为和事件处理程序:

[
    ...
    'user' => [
        'class' => 'dektrium\user\Module',
        'modelMap' => [
            'User' => [
                'class' => 'app\models\User',
                'on user_create_init' => function () {
                    // do you magic
                },
                'as foo' => [
                    'class' => 'Foo',
                ],
            ],
        ],
    ],
    ...
]

 重写默认view:

 1 ...
 2 'components' => [
 3     'view' => [
 4         'theme' => [
 5             'pathMap' => [
 6                 '@dektrium/user/views' => '@app/views/user'
 7             ],
 8         ],
 9     ],
10 ],
11 ...

重写控制器 和 使用事件:

 1 namespace app\controllers\user;
 2 
 3 use dektrium\user\controllers\AdminController as BaseAdminController;
 4 
 5 class AdminController extends BaseAdminController
 6 {
 7     public function actionCreate()
 8     {
 9         // do your magic
10     }
11 }
12 ------------------------------------------------------------------
13 ...
14 'modules' => [
15     ...
16     'user' => [
17         'class' => 'dektrium\user\Module',
18         'controllerMap' => [
19             'admin' => 'app\controllers\user\AdminController'
20         ],
21         ...
22     ],
23     ...
24 ],
25 //重写控制器/方法

 

 1 'user' => [
 2     'class' => \dektrium\user\Module::className(),
 3     'controllerMap' => [
 4         'registration' => [
 5             'class' => \dektrium\user\controllers\RegistrationController::className(),
 6             'on ' . \dektrium\user\controllers\RegistrationController::EVENT_AFTER_REGISTER => function ($e) {
 7                 Yii::$app->response->redirect(array('/user/security/login'))->send();
 8                 Yii::$app->end();
 9             }
10         ],
11     ],
12 ],
// 注册之后 跳转到 登录页面 而不是仅仅提示信息

 改变后台管理用户页面的 布局(layout):

 1 'modules' => [
 2     ...
 3     'user' => [
 4         'class' => 'dektrium\user\Module',
 5         'controllerMap' => [
 6             'admin' => [
 7                 'class'  => 'app\controllers\user\AdminController',
 8                 'layout' => 'path-to-your-admin-layout',
 9             ],
10         ],
11         ...
12     ],
13     ...
14 ],

使用第三方登录:

'components' => [
  'authClientCollection' => [
      'class' => yii\authclient\Collection::className(),
      'clients' => [
          'facebook' => [
              'class'        => 'dektrium\user\clients\Facebook',
              'clientId'     => 'CLIENT_ID',
              'clientSecret' => 'CLIENT_SECRET',
          ],
          'twitter' => [
              'class'          => 'dektrium\user\clients\Twitter',
              'consumerKey'    => 'CONSUMER_KEY',
              'consumerSecret' => 'CONSUMER_SECRET',
          ],
          'google' => [
              'class'        => 'dektrium\user\clients\Google',
              'clientId'     => 'CLIENT_ID',
              'clientSecret' => 'CLIENT_SECRET',
          ],
      ],
  ],
],

facebook 获取的用户信息 补充到用户信息实例

use dektrium\user\controllers\SecurityController; 

Event::on(SecurityController::class, SecurityController::EVENT_AFTER_AUTHENTICATE, function (AuthEvent $e) {
    //如果用户不存在
    if ($e->account->user === null) {
        return;
    }

    // 不同的第三方平台提供的信息不 一样
    switch ($e->client->getName()) {
        case 'facebook':
            $e->account->user->profile->updateAttributes([
                'name' => $e->client->getUserAttributes()['name'],
            ]);
        case 'vkontakte':
            // some different logic
    }

    // 保存所有第三方用户属性到 model 下
    // Yii::$app->identity->user->accounts['facebook']->decodedData
});

其他的功能 如:

自定义邮件发送类型 添加验证码 用户扩展字段 注册时填写更多信息等 下次分解

 

 posted on 2016-04-01 10:18  changs  阅读(917)  评论(0编辑  收藏  举报