您的位置:首页 > 编程语言 > PHP开发

yii2-user

2016-04-01 10:18 387 查看
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:

...
'components' => [
'view' => [
'theme' => [
'pathMap' => [
'@dektrium/user/views' => '@app/views/user'
],
],
],
],
...


重写控制器 和 使用事件:

namespace app\controllers\user;

use dektrium\user\controllers\AdminController as BaseAdminController;

class AdminController extends BaseAdminController
{
public function actionCreate()
{
// do your magic
}
}
------------------------------------------------------------------
...
'modules' => [
...
'user' => [
'class' => 'dektrium\user\Module',
'controllerMap' => [
'admin' => 'app\controllers\user\AdminController'
],
...
],
...
],
//重写控制器/方法


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


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

'modules' => [
...
'user' => [
'class' => 'dektrium\user\Module',
'controllerMap' => [
'admin' => [
'class'  => 'app\controllers\user\AdminController',
'layout' => 'path-to-your-admin-layout',
],
],
...
],
...
],


使用第三方登录:

'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
});


其他的功能 如:

自定义邮件发送类型 添加验证码 用户扩展字段 注册时填写更多信息等 下次分解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: