Skip to content

lozhu/webman-auth

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 

Repository files navigation

'Build Status' 'Latest Stable Version' 'Total Downloads' 'License'

安装

composer require shopwwi/webman-auth

配置文件

//路径 config/plugin/shopwwi/auth/app.php
// app_key 如果是laravel迁移过来的用户需与之前laravel的保持一致 如果是全新的 随意写个key即可
// jwt 配置项按自己需求配置即可 redis默认为false 如果要限制终端 则改为true
配置多用户

//初始化的示例 一定要改成自己实际的
'guard' => [
     'user' => [
         'key' => 'id', //主键
         'field' => ['id','name','email','mobile'], //设置允许写入扩展中的字段 一般为数据表存在的字段
         'num' => 0, //-1为不限制终端数量 0为只支持一个终端在线 大于0为同一账号同终端支持数量 建议设置为1 则同一账号同终端在线1个
         'model'=> app\model\Test::class
     ]
];
// 配置示例(根据自己真实情况 user一定要存在 因为默认就是user)
// field 是可以通过jwtKey解析出来的 请勿用敏感字段 以免信息泄露
'guard' => [
     'user' => [ // 普通用户
         'key' => 'id', //主键
         'field' => ['id','username','email','mobile','avatar'], //设置允许写入扩展中的字段 一般为数据表存在的字段
         'num' => 0, //-1为不限制终端数量 0为只支持一个终端在线 大于0为同一账号同终端支持数量 建议设置为1 则同一账号同终端在线1个
         'model'=> app\model\User::class //用户表模型
     ],
     'admin' => [ // 平台用户
         'key' => 'id', //主键
         'field' => ['id','name','avatar'], //设置允许写入扩展中的字段 一般为数据表存在的字段
         'num' => 0, //-1为不限制终端数量 0为只支持一个终端在线 大于0为同一账号同终端支持数量 建议设置为1 则同一账号同终端在线1个
         'model'=> app\model\Admin::class //管理员表模型
     ]
];

使用方法

  1. 生成JWT密钥(命令行)
php webman shopwwi:auth

  1. 加密密码
use Shopwwi\WebmanAuth\Facade\Auth;

//不可逆转 只能用password_verify来判断正确与否
$password = '123456';
Auth::bcrypt($password);

3.自动对字段进行验证且登入

use Shopwwi\WebmanAuth\Facade\Auth;

//验证字段一定得和设定得角色模型相匹配可以是任何字段组
// 这里自动进行了model查库操作 如果你的不支持 请用自定义登入
$tokenObject = Auth::attempt(['name'=> 'tycoonSong','password' => '123456']);

//返回对象$tokenObject 包含token_type,expires_in,refresh_expires_in,access_token,refresh_token
    
// 默认为user角色 当你是admin登入时
$tokenObject = Auth::guard('admin')->attempt(['name'=> 'tycoonSong','password' => '123456']);

4.自定义登入

use Shopwwi\WebmanAuth\Facade\Auth;
use app\model\User;
use app\model\Admin;
//返回对象$tokenObject 包含token_type,expires_in,refresh_expires_in,access_token,refresh_token

$user = User::first();
$tokenObject = Auth::login($user);//$user可以是对象 同样可以是数组
    
    
// 默认为user角色 当你是admin登入时
$admin = Admin::first();
$tokenObject = Auth::guard('admin')->login($admin);

5.获取当前登入用户信息

    use Shopwwi\WebmanAuth\Facade\Auth;
     $user = Auth::user(); //得到用户模型对象,查库数据,需查询动态数据时使用
     $user = Auth::user(true); // 得到扩展数据对象,非查库数据,比如只需得到用户ID或不常更新字段使用
     $admin = Auth::guard('admin')->user(); //当前登入管理员
 

6.退出登入

    use Shopwwi\WebmanAuth\Facade\Auth;
     $logout = Auth::logout(); //退出当前用户
     $logout = Auth::logout(true); // 退出所有当前用户终端
     $logout = Auth::guard('admin')->logout(); //管理员退出
 

7.刷新当前登入用户token

     use Shopwwi\WebmanAuth\Facade\Auth;
     $refresh = Auth::refresh();
     $refresh = Auth::guard('admin')->refresh(); //管理员刷新
 

8.单独设置过期时间

use Shopwwi\WebmanAuth\Facade\Auth;
use app\model\User;
$user = User::first();
Auth::accessTime(3600)->refreshTime(360000)->login($user);
Auth::accessTime(3600)->refreshTime(360000)->attempt(['name'=> 'tycoonSong','password' => '123456']);
Auth::accessTime(3600)->refresh();

9.获取报错信息 Auth::fail();

    //默认设定是不会报错的 
    $user = Auth::user(); //当没有登入或异常时返回的null 用于用户可登入或可不登入场景里 只需要判断 $user == null 即可
    //而比如在会员中心调用时 
    $user = Auth::fail()->user(); //走的是异常处理类https://www.workerman.net/doc/webman/exception.html
  • 开启redis后,建议开启
    // 在使用过程中我们通常一个接口允许多端使用的情况 那么默认设置是不限制使用端口的 
    // 可当你想允许比如web端同一账号只允许存在三个终端在线或同一账号APP只允许一个终端使用
    // 默认为web终端 传参client_type=web或你其它的终端client_type=ios
    //config/plugin/shopwwi/auth/app.php设置
    'guard' => [
         'user' => [ // 普通用户
             'key' => 'id', //主键
             'field' => ['id','username','email','mobile','avatar'], //设置允许写入扩展中的字段 一般为数据表存在的字段
             'num' => 0, //-1为不限制终端数量 0为只支持一个终端在线 大于0为同一账号同终端支持数量 建议设置为1 则同一账号同终端在线1个
             'model'=> app\model\User::class //用户表模型
         ]
     ]
     'jwt' => [
         'redis' => false,
         ....
      ]
     
    Auth::logout(true); // 退出所有当前用户终端
    
  • 获取所有redis用户及终端状态
    // 你可以使用redis hash对终端在线更好的管理 比如对某个用户进行下线处理,或查询用户的token有效期
    // 具体业务自行根据需求去实现 本系统未对这方面业务进行封装
    $guard = 'user';
    Redis::hGetAll('token_'.$guard);
    // 用户编号为1 的 token下线清除 ,可以批量
    Redis::hDel('token_'.$guard,[1]);
  • 直接调用jwt
    use Shopwwi\WebmanAuth\Facade\JWT as JwtFace;
    JwtFace::guard('user')->make($extend,$access_exp,$refresh_exp); //生成token 可为make($extend)
    JwtFace::guard('user')->refresh($accessTime = 0); //刷新令牌 可为refresh()
    JwtFace::guard('user')->verify($token); //$token可以不填则自动验证令牌 verify()
    JwtFace::guard('user')->getTokenExtend($token)//$token可以不填则自动验证令牌getTokenExtend()

About

webman auth用户认证

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 100.0%