从
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 };
谢谢你。
看看你写的那一行:
await SecureStore.setItemAsync(prefixkey, JSON.stringify(item));
“item”是一个字符串化对象。 该对象包含字符:“{”、“:”、“””、“}” 世博会安全存储不允许这样做。
我建议您对数据进行哈希处理(使用 bcrypt),或者将其转换为令牌(使用 jasonwebtoken)。 这会将其值更改为字母数字字符。