向 SecureStore 提供的密钥无效。键不能为空且只能包含字母数字字符、“.”、“-”和“_”

问题描述 投票:0回答:1

AsyncStorage
更改为
Expo SecureStore
后,我不断收到此错误,

SecureStore
提供的密钥无效。键不能为空,并且只能包含字母数字字符、“.”、“-”和“_”。

我不知道具体如何解决。难道是我用来连接的 + 运算符

我怀疑错误就在这里或者:

    import * as SecureStore from "expo-secure-store";
import dayjs from "dayjs";

const prefix = "cache";
const expiryInMinutes = 5;

async function store(key, value) {
  try {
    const item = {
      value,
      timestamp: Date.now(),
    };
    const prefixkey = prefix + key;

    await SecureStore.setItemAsync(prefixkey, JSON.stringify(item));
  } ...
  }
}

async function get(key) {
  try {
    const prefixkey = prefix + key;
    const value = await SecureStore.getItemAsync(prefixkey);
    const item = JSON.parse(value);

    if (!item) return null;

    if (isExpired(item)) {
      await SecureStore.deleteItemAsync(prefixkey);
      return null;
    }

    return item.value;
  } catch ...
  }
}

export default {
  store,
  get,
};

或这里:

import * as SecureStore from "expo-secure-store";
import jwtDecode from "jwt-decode";

const key = "authToken";

const storeToken = async (authToken) => {
  try {
    await SecureStore.setItemAsync(key, authToken);
  } catch (error) ...
  
};

const getToken = async () => {
  try {
    return await SecureStore.getItemAsync(key);
  } catch ...
  }
};

const getUser = async () => {
  const token = await getToken();
  return token ? jwtDecode(token) : null;
};

const removeToken = async () => {
  try {
    await SecureStore.deleteItemAsync(key);
  } catch ...
  }
};

export default { getToken, getUser, removeToken, storeToken };

谢谢你。

react-native expo asyncstorage
1个回答
0
投票

看看你写的那一行:

   await SecureStore.setItemAsync(prefixkey, JSON.stringify(item));

“item”是一个字符串化对象。 该对象包含字符:“{”、“:”、“””、“}” 世博会安全存储不允许这样做。

我建议您对数据进行哈希处理(使用 bcrypt),或者将其转换为令牌(使用 jasonwebtoken)。 这会将其值更改为字母数字字符。

© www.soinside.com 2019 - 2024. All rights reserved.