mingyuanyun / yii2-ilogin
统一登录组件,可扩展不同的登录方式,目前支持ldap登录、企业微信静默授权登录、企业微信扫码登录、普通账号密码登录,提供自定义登录退出事件处理类,登录成功后可获取用户上下文信息。
v1.1.211008
2021-10-08 07:19 UTC
Requires
- gregwar/captcha: ^1.1
- mingyuanyun/iwechat: dev-master
This package is not auto-updated.
Last update: 2024-04-19 19:44:03 UTC
README
安装方法
composer require mingyuanyun/yii2-ilogin
配置
在配置文件中components中添加iLogin组件
'components' => [
'iLogin' => [
'class' => 'iLogin\Login', // 必填
'eventHandler' => '\services\login\LoginEventHandler',
'enableCaptcha' => true,
'errorCountToShowCaptcha' => 3,
'errorCountToLock' => 5,
'lockSeconds' => 900,
'config' => [
'ldap' => [
'host' => '47.111.3.122',
'port' => '389',
'version' => 3,
'bindDn' => '授权帐号',
'bindPassword' => '帐号密码',
'baseDn' => 'OU=02-明源集团,OU=用户管理,OU=明源软件,DC=mysoft,DC=com,DC=cn'
],
'qy-wx' => [
'appId' => 'appId',
'appSecret' => 'appSecret',
'agentId' => 1000050,
'redirectUri' => 'https://devops.mysre.cn/user/oauth-login'
],
'account-pwd' => [
'pwdValidateProvider' => '\common\services\PwdValidateProvider' // 普通账号密码登录时的账号密码校验类,实现接口\iLogin\interfaces\PwdValidateInterface,校验成功返回用户基本信息,校验失败返回false
]
]
],
]
如果上面添加iLogin组件的时候没有添加登录类型的不同配置,可以在params.php中添加配置
'iLogin' => [
'config' => [
'ldap' => [
'host' => '47.111.3.122',
'port' => '389',
'version' => 3,
'bindDn' => '授权帐号',
'bindPassword' => '帐号密码',
'baseDn' => 'OU=02-明源集团,OU=用户管理,OU=明源软件,DC=mysoft,DC=com,DC=cn'
],
'qy-wx' => [
'appId' => 'appId',
'appSecret' => 'appSecret',
'agentId' => 109,
'redirectUri' => 'https://devops-test.mysre.cn/user/oauth-login'
],
'account-pwd' => [
'pwdValidateProvider' => '\common\services\PwdValidateProvider' // 普通账号密码登录时的账号密码校验类,实现接口\iLogin\interfaces\PwdValidateInterface,校验成功返回用户基本信息,校验失败返回false
]
]
],
- 通用配置说明
属性 | 含义 | 说明 |
---|---|---|
eventHandler | 登录前后事件处理类 | 选填,登录事件处理类,继承基类\iLogin\base\LoginEventHandlerBase |
enableCaptcha | 是否启用验证码 | 选填,默认为false |
errorCountToShowCaptcha | 输入错误几次后显示验证码 | 选填,默认值为3 |
errorCountToLock | 输入错误几次后账号锁定 | 选填,默认值为5 |
lockSeconds | 账号锁定后的锁定时长(秒) | 选填,默认值为900(15分钟) |
- ldap配置说明
属性 | 含义 | 说明 |
---|---|---|
host | ldap主机 | 必须 |
port | ldap端口 | 必须 |
version | ldap版本 | 必须 |
bindDn | bindDn | 必须 |
bindPassword | bindPassword | 必须 |
baseDn | baseDn | 必须 |
- qy-wx配置说明
属性 | 含义 | 说明 |
---|---|---|
appId | 企业号 | 必须 |
appSecret | 权限组token 该组必须有访问用户信息的接口权限 | 必须 |
agentId | 应用id | 必须 |
redirectUri | 微信授权回调地址 | 必须 |
- account-pwd配置说明
属性 | 含义 | 说明 |
---|---|---|
pwdValidateProvider | 账号密码校验类 | 必须,普通账号密码登录时的账号密码校验类,实现接口\iLogin\interfaces\PwdValidateInterface,校验成功返回用户基本信息,校验失败返回false |
参见demo文件夹下的PwdValidateProvider |
ldap登录
$account = 'zhangq11';
$password = '123456';
$captchaCode = '123456'; // 用户输入的验证码
$captchaUid = 'abcdef123456'; // 用户会话sessionId,用于存储验证码,也可以用前后端约定的唯一标识
\Yii::$app->iLogin->createLoginService('ldap')
->set('account', $account)
->set('password', $password)
->login();
// 登录后的用户上下文
$userContext = \Yii::$app->iLogin->getUserContext();
// 扩展字段
$userContext->source = 'ldap';
var_dump($userContext);
微信静默授权、企业微信扫码登录
前端或者拼接授权链接或者生成二维码,引导用户访问,具体请参照:
网页授权登录:https://work.weixin.qq.com/api/doc#90000/90135/91020
扫码授权登录:https://work.weixin.qq.com/api/doc#90000/90135/90988
授权回调地址相关代码参考
// 授权码
$code = $_REQUEST['code'];
\Yii::$app->iLogin->createLoginService('qy-wx')
->set('code', $code)
->login();
// 登录后的用户上下文
$userContext = \Yii::$app->iLogin->getUserContext();
// 扩展字段
$userContext->source = 'qy-wx';
var_dump($userContext);
普通账号密码登录
$account = 'zhangq11';
$password = '123456';
$captchaCode = '123456'; // 用户输入的验证码
$captchaUid = 'abcdef123456'; // 用户会话sessionId,用于存储验证码,也可以用前后端约定的唯一标识
\Yii::$app->iLogin->createLoginService('account-pwd')
->set('account', $account)
->set('password', $password)
->set('captchaCode', $captchaCode)
->set('captchaUid', $captchaUid)
->login();
// 登录后的用户上下文
$userContext = \Yii::$app->iLogin->getUserContext();
// 扩展字段
$userContext->source = 'account-pwd';
var_dump($userContext);
iLogin登录接口返回$userContext属性说明(以普通账号密码为例)
属性 | 含义 |
---|---|
loginStatus | 登录状态 0失败1成功 |
isLocked | 该账号是否锁定 0未锁定1锁定 |
needShowCaptcha | 前端是否需要显示验证码,0不需要1需要 |
isCaptchaError | 是否用户验证码输入错误 |
cnName | 登录成功后用户名称(普通账号密码由pwdValidateProvider的校验方法返回,不存在该信息则为空) |
登录成功后用户邮箱,同cnName来源 | |
mobile | 登录成功后用户手机号码,同cnName来源 |
获取验证码接口(返回格式为图片,更多使用请参考https://github.com/Gregwar/Captcha)
$captchaUid = 'abcdef123456'; // 验证码唯一标识,用于存储客户端用户刷新的验证码
// 1、返回格式为image/jpeg
\iLogin\services\LoginCaptchaService::getCaptcha($captchaUid);
// 1、返回格式为base64字符串
\iLogin\services\LoginCaptchaService::getCaptchaBase64($captchaUid);
说明
登录成功后会将用户信息存入iLogin组件中,可通过\Yii::$app->iLogin->getUserContext()进行访问,该类定义请参照\iLogin\UserContext,可通过\Yii::$app->iLogin->getUserContext()->{$attribute} = $value进行扩展。