mingyuanyun/yii2-ilogin

统一登录组件,可扩展不同的登录方式,目前支持ldap登录、企业微信静默授权登录、企业微信扫码登录、普通账号密码登录,提供自定义登录退出事件处理类,登录成功后可获取用户上下文信息。

v1.1.211008 2021-10-08 07:19 UTC

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配置说明
属性含义说明
hostldap主机必须
portldap端口必须
versionldap版本必须
bindDnbindDn必须
bindPasswordbindPassword必须
baseDnbaseDn必须
  • 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的校验方法返回,不存在该信息则为空)
email登录成功后用户邮箱,同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进行扩展。