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

其他的功能 如:

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

yii2-user的更多相关文章

  1. Yii2的深入学习--行为Behavior

    我们先来看下行为在 Yii2 中的使用,如下内容摘自 Yii2中文文档 行为是 [[yii\base\Behavior]] 或其子类的实例.行为,也称为 mixins,可以无须改变类继承关系即可增强一 ...

  2. 网站实现微信登录之回调函数中登录逻辑的处理--基于yii2开发的描述

    上一篇文章网站实现微信登录之嵌入二维码中描述了如何在自己的登录页面内嵌入登录二维码,今天的这篇文章主要是描述下在扫码成功之后微信重定向回网站后登录逻辑的处理,其实也就是验证身份信息,授权用户登录的逻辑 ...

  3. 网站实现微信登录之嵌入二维码——基于yii2开发的描述

    之前写了一篇yii2获取登录前的页面url地址的文章,然后发现自己对于网站实现微信扫码登录功能的实现不是很熟悉,所以,我会写2-3篇的文章来描述下一个站点如何实现微信扫码登录的功能,来复习下微信扫码登 ...

  4. yii2获取登录前的页面url地址--电脑和微信浏览器上的实现以及yii2相关源码的学习

    对于一个有登录限制(权限限制)的网站,用户输入身份验证信息以后,验证成功后跳转到登录前的页面是一项很人性化的功能.那么获取登录前的页面地址就很关键,今天在做一个yii2项目的登录调试时发现了一些很有意 ...

  5. 记一次nginx部署yii2项目时502 bad gateway错误的排查

    周六闲来无事,就试着安装和部署下yii2,安装过程没什么问题,但部署到nginx上时遇到了502 bad gatewary问题,折腾了半天才搞定.这个问题是我以前在部署yii2时没有遇到过的,因此记在 ...

  6. yii2的权限管理系统RBAC简单介绍

    这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...

  7. yii2 RESTful api的详细使用

    作者:白狼 出处:http://www.manks.top/yii2-restful-api.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

  8. yii2 ActiveRecord多表关联以及多表关联搜索的实现

    作者:白狼 出处:http://www.manks.top/yii2_many_ar_relation_search.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明 ...

  9. yii2权限控制rbac之rule详细讲解

    作者:白狼 出处:http://www.manks.top/yii2_rbac_rule.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留 ...

  10. yii2组件之多图上传插件FileInput的详细使用

    作者:白狼 出处:http://www.manks.top/yii2_multiply_images.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...

随机推荐

  1. viewpaper

    引用:http://blog.csdn.net/billpig/article/details/6650097 增加回弹 http://www.apkbus.com/android-78437-1-1 ...

  2. Excel应该这么玩——4、命名区域:搞定下拉框

    前三篇都是讲的给Excel元素命名,本篇再介绍一种命名的使用方式:命名区域.区域是多个单元格的集合,可以是单行.单列或者类似表格的单元格矩阵,也可以是不连续的多个单元格,但很少用到.当然,一个单元格也 ...

  3. spring.net

    Spring.Net有两个很重要的感念就是IoC(控制反转)和DI(依赖注入). IoC.英文全称Inversion of Control.控制反转.DI.英文全称Dependency Injecti ...

  4. 机器学习实战-边学边读python代码(5)

    def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):    p1 = sum(vec2Classify * p1Vec) + log(pClass1 ...

  5. 页面缩放对css的影响

    昨天发现一个上线的项目css样式明显不对,但是查看别人的电脑上的页面样式都是没问题的,于是找了半天原因,原来是我的浏览器对这个页面缩放了,导致样式问题. 发现了页面缩放会作用在同一个域名下的所有页面, ...

  6. Ajax实现原理详解

    Ajax:Asynchronous javascript and xml,实现了客户端与服务器进行数据交流过程.使用技术的好处是:不用页面刷新,并且在等待页面传输数据的同时可以进行其他操作. 这就是异 ...

  7. JAVA基础知识之JDBC——离线RowSet

    离线RowSet 如果直接使用ResultSet, 程序在得到ResultSet记录之后需要立即使用,否则一旦关闭Connection就不再可用,要解决这种情况要么将ResultSet的结果转换成Ja ...

  8. python学习笔记十三 JS,Dom(进阶篇)

    JS介绍 JavaScript 是属于网络的脚本语言!JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用:JavaScript 是因特网上最流 ...

  9. 批量运行R包

    #批量运行包:all.pcg <- c("data.table","ggplot2","rmarkdown","tidyr& ...

  10. "旋转的风车"----windows(GDI)绘图

    这正是秋季将尽, 冬季未到的时节. 黄土高坡上已滚起了漫天黄沙, 而这里却是万里晴空如练!  风, 丝丝入骨! 未央柳即将枯死的枝条,仍在挣扎. 街道两旁清一色的银杏树叶, 金灿耀眼. 耀的令人感动, ...