PHP code example of watsonhaw / think-satoken

1. Go to this page and download the library: Download watsonhaw/think-satoken library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

watsonhaw / think-satoken example snippets


// config/satoken.php
return [
    'store' => 'redis',
    // ...
];

// config/cache.php
return [
    'default' => 'file',
    'stores' => [
        // 业务默认缓存(file)
        'file' => [
            'type' => 'File',
            // ...
        ],
        // SaToken 专用 Redis 缓存
        'redis' => [
            'type' => 'redis',
            'host' => '127.0.0.1',
            'port' => 6379,
            'password' => '',
            'select' => 1, // 建议用独立的 DB 号与业务隔离
            // ...
        ],
    ],
];

return [
    // 自定义 Token 请求头名称(为空则使用 Authorization: Bearer {token})
    'token_name' => '',

    // 缓存通道名称(对应 cache.php 配置中的 stores 键名)
    // null 表示使用框架默认缓存
    // 多机部署请配置为 'redis' 并确保在 cache.php 中正确配置
    'store' => null,

    // Token 有效期(秒),默认 7 天
    'timeout' => 604800,

    // 是否启用滑动续期(用户活跃时自动延长有效期)
    'auto_renew' => true,

    // 在过期前多少秒续期(秒):剩余有效期不足此值时才续期
    // 默认 3600 秒(1小时),避免每次请求都写缓存
    // 设为 0 表示每次访问都续期
    'renew_before' => 3600,

    // 同一账号最多同时在线的 token 数(即最大登录数),默认 10
    // 超出此值时,最早登录的 token 将被自动顶掉;设为 1 等价于"单端登录"
    'max_login_count' => 10,
];

use satoken\facade\SaToken;

// 用户登录,返回生成的 token(每次调用都生成独立 token,支持多端)
$phoneToken = SaToken::login(1001);
$pcToken    = SaToken::login(1001); // 同账号再次登录,PC 端也获得独立 token

// 登录时附加自定义数据(每个 token 独立保存,互不覆盖)
$token = SaToken::login(1001, ['role' => 'admin', 'device' => 'mobile', 'tenant_id' => 42]);

// 检查是否已登录
if (SaToken::isLogin($phoneToken)) {
    echo '手机端用户已登录';
}
if (SaToken::isLogin($pcToken)) {
    echo 'PC 端用户已登录';
}

// 获取当前登录用户ID
$loginId = SaToken::getCurrentLoginId($token);

// 获取自定义附加数据
$extra = SaToken::getExtra($token);

// 更新自定义附加数据(不影响有效期)
SaToken::setExtra($token, ['role' => 'editor']);

// 指定端登出(只让手机端下线,PC 端继续在线)
SaToken::logout($phoneToken);

// 强制踢出用户(使其所有端的 token 全部失效,全端下线)
SaToken::kickout(1001);

// 强制踢出指定 token(只下线某一端)
SaToken::kickoutByToken($token);

return [
    // 路由中间件
    'router' => [
        'auth' => 'satoken\middleware\SatokenAuth',
    ],
];

Route::get('api/user/profile', 'UserController@profile')->middleware('auth');

use satoken\facade\SaToken;
use satoken\exception\NotLoginException;
use satoken\exception\TokenInvalidException;

try {
    SaToken::checkLogin();
    // 已登录,执行业务逻辑
} catch (NotLoginException $e) {
    // 未提供 token
} catch (TokenInvalidException $e) {
    // token 无效或已过期
}