Skip to content

安全存储

SecureStorage 提供加密的本地安全存储服务,适用于存储敏感数据(如认证 token、密钥等)。数据经过加密后存储在设备上。通过 Telegram.WebApp.SecureStorage 访问。Bot API 8.0+

限制

项目限制
最大条目数10
键名最大长度128 字符
值最大长度2048 字符
键名字符A-Za-z0-9_-

方法

setItem

javascript
Telegram.WebApp.SecureStorage.setItem(key, value, callback)

安全存储一个键值对。

参数类型必填描述
keyString键名,1-128 字符
valueString值,0-2048 字符
callbackFunction回调函数,参数 (error, success)
javascript
Telegram.WebApp.SecureStorage.setItem('auth_token', 'eyJhbGciOi...', (error, success) => {
  if (error) {
    console.error('安全存储失败:', error);
  } else {
    console.log('Token 已安全存储');
  }
});

getItem

javascript
Telegram.WebApp.SecureStorage.getItem(key, callback)

从安全存储中读取指定键的值。

参数类型必填描述
keyString键名
callbackFunction回调函数,参数 (error, value)
javascript
Telegram.WebApp.SecureStorage.getItem('auth_token', (error, value) => {
  if (error) {
    console.error('读取失败:', error);
  } else if (value) {
    // 使用 token
    apiClient.setToken(value);
  }
});

removeItem

javascript
Telegram.WebApp.SecureStorage.removeItem(key, callback)

从安全存储中删除指定键。

参数类型必填描述
keyString键名
callbackFunction回调函数,参数 (error, success)

clear

javascript
Telegram.WebApp.SecureStorage.clear(callback)

清除安全存储中的所有数据。

参数类型必填描述
callbackFunction回调函数,参数 (error, success)

三种存储对比

特性CloudStorageDeviceStorageSecureStorage
存储位置云端本地本地(加密)
数据同步跨设备仅本地仅本地
容量1024 键 × 4KB5 MB10 键 × 2KB
安全性普通普通加密
适用场景用户偏好缓存数据敏感数据
最低版本Bot API 8.0+Bot API 8.0+

使用示例

javascript
const secureStorage = Telegram.WebApp.SecureStorage;

// 安全存储登录凭据
function saveCredentials(token, refreshToken) {
  secureStorage.setItem('access_token', token, (err) => {
    if (!err) {
      secureStorage.setItem('refresh_token', refreshToken);
    }
  });
}

// 读取登录凭据
function loadCredentials(callback) {
  secureStorage.getItem('access_token', (err, token) => {
    if (err || !token) {
      callback(null);
      return;
    }
    secureStorage.getItem('refresh_token', (err, refreshToken) => {
      callback({ token, refreshToken });
    });
  });
}

// 登出时清除凭据
function logout() {
  secureStorage.clear((err) => {
    if (!err) {
      console.log('凭据已清除');
      redirectToLogin();
    }
  });
}