lzpeng / think-auth
There is no license information available for the latest version (1.1.5) of this package.
1.1.5
2020-03-05 08:34 UTC
Requires
- topthink/framework: v5.1.*
Requires (Dev)
- phpunit/phpunit: ^7.5
README
1.0 版本已废弃, 请使用1.1版本
基于thinkphp5.1的用户认证系统。
安装
composer.json 添加以下内容
"repositories": [
{
"type": "git",
"url": "http://172.0.6.108:3000/lzpeng/think-auth"
}
],
// 设置非安全链接
"config": {
...
"secure-http": false
}
然后命令行运行
composer require lzpeng/think-auth=1.1.*
配置
在项目应用或模块的config目录下创建auth.php配置文件
return [
'default' => 'test1', // 默认使用的认证器标识
'test1' => [ // 认证器标识
'driver' => 'session', // 认证器驱动; 内置支持session和simpleToken
'sessionKey' => 'UserIdentity', // 会话key
'provider' => [ // 认证所使用的用户提供器
'driver' => 'model', // 用户提供器驱动; 内置支持model和database
'modelClass' => 'app\common\model\User', // 模型类; 需要实现Lzpeng\Auth\Contracts\UserIdentity接口
'idKey' => 'id', // 模型对应的用户标识属性名称; 可选; 默认为'id'
'passwordKey' => 'password', // 用户凭证数组里的密码key; 可选; 默认为'password'
'forceValidatePassword' => true, // 是否强制验证密码; 如果是ture但没传入密码凭证,凭证就验证失败; false的话不传密码凭证就忽略密码凭证的验证; 可选; 默认为true
'hasher' => [
'driver' => 'bcrypt', // 密码hasher; 内置只支持bcrypt
// 'driver' => '\test\HMacHasher' // 只支持自定义driver; 需实现Lzpeng\Auth\Contracts\Hasher接口
// 'algo' => 'md5',
// 'salt' => 'xxxxxx',
]
],
// 以下是simpleToken认证器配置例子
// 'driver' => 'simpleToken',
// 'tokenKey' => 'User-Token', // token名称
// 'cache' => [ // 缓存配置; 支持thinkphp的缓存配置 可选; 不设置使用框架的cache配置;
// 'type' => 'File',
// 'path' => '',
// 'prefix' => '',
// 'expire' => 1200,
// ],
// 以下的database用户提供器配置例子
// 'provider' => [
// 'driver' => 'database',
// 'table' => 'user',
// 'passwordKey' => 'password', // 用户凭证数组里的密码key; 可选; 默认为'password'
// 'forceValidatePassword' => true, // 是否强制验证密码; 如果是ture但没传入密码凭证,凭证就验证失败; false的话不传密码凭证就忽略密码凭证的验证; 可选; 默认为true
// 'hasher' => [
// 'driver' => 'bcrypt', // 密码hasher; 内置只支持bcrypt
// ]
// ]
'behaviors' => [ // 认证过程中的行为绑定; 实现了AuthBehavior接口
'login_before' => [
'app\behaivor\checkAttempt',
],
'login_success' => [],
'login_failure' => [],
'logout_before' => [],
'logout_after' => [],
]
],
'test2' => [
...
],
]
使用例子
用户凭证登录:
use Lzpeng\Auth\Auth;
use Lzpeng\Auth\Exceptions\AuthenticationException;
try {
$result = Auth::login(['username' => 'test', 'password' => 'password']);
// session认证器,$result返回为null
// simpleToken认证器,$result返回为token, 用于返回给客户端
// 认证成功处理逻辑
} catch (AuthenticationException $ex) {
// 异常处理
}
跳过认证,直接设置认证用户
try {
$user = fromOtherSystem($id);
$result = Auth::setUser($user);
// 认证成功处理逻辑
} catch (AuthenticationException $ex) {
// 异常处理
}
判断当前用户是否已登录:
if (Auth::isLogined()) {
// 用户已认证登录
}
获取当前用户标识
$id = Auth::getId(); // 如果未认证登录将返回null
获取当前用户对象:
$user = Auth::getUser(); // 如果未认证登录将返回null
用户登出:
Auth::logout();
多认证器使用: 用于单一模块有多个用户系统的时候
Auth::make('test1')->login(['username' => 'xxx', 'password' = 'xxx']);
Auth::make('test2')->login(['admin' => 'xxx', 'password' => 'xxxx]);
$user = Auth::make('test1')->getUser();
$admin = Auth::make('test2')->getUser();
扩展
通过实现Lzpeng\Auth\Contracts\Authenticator接口可以实现自定义认证器
通过实现Lzpeng\Auth\Contracts\UserProvider接口可以实现自定义用户提供器
通过实现Lzpeng\Auth\Contracts\UserIdentity接口可以实现自定义用户对象