react-native - React Native - sha256 code_challenge 在使用异步函数后没有返回正确的值
问题描述
我在尝试将我的代码验证器转换为代码挑战时遇到了麻烦。由于某种原因,该函数要么不等待异步,要么每次都返回 null。我已经坚持了几个小时了。任何帮助或建议将不胜感激。
导出默认函数 App() {
console.log('verifier: ' + verifier);
const challenge = async() => {
await generateCodeChallengeFromVerifier(verifier)
.then(base64encoded => {
resolve(base64encoded) })
.catch(error => {
return reject(error);
})
}
console.log('verifier: ' + verifier);
console.log('challenge: ' + JSON.stringify(challenge()));
示例结果:
verifier: 0a34386f23aeb7b4c3cb984a49898ccd7c865965fb4f29659ce1588a
challenge: {"_U":0,"_V":0,"_W":null,"_X":null}
这是我正在调用的已定义函数:
// GENERATING CODE VERIFIER
function dec2hex(dec) {
return ("0" + dec.toString(16)).substr(-2);
}
function generateCodeVerifier() {
var array = new Uint32Array(56 / 2);
window.crypto.getRandomValues(array);
return Array.from(array, dec2hex).join("");
}
const verifier = generateCodeVerifier();
// GENERATING CODE CHALLENGE
function sha256(plain) {
const encoder = new TextEncoder();
const data = encoder.encode(plain);
return window.crypto.subtle.digest("SHA-256", data);
}
function base64urlencode(a) {
var str = "";
var bytes = new Uint8Array(a);
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
str += String.fromCharCode(bytes[i]);
}
return btoa(str)
.replace(/\+/g, "-")
.replace(/\//g, "_")
.replace(/=+$/, "");
}
async function generateCodeChallengeFromVerifier(v) {
var hashed = await sha256(v);
var base64encoded = base64urlencode(hashed);
return base64encoded;
}
解决方案
推荐阅读
- bash - 在单独的行中定义时,Docker build-arg 不会自动获取 env 变量
- oracle - Oracle 12c 全文索引维护
- jquery - 如何禁用仅向上拖动以关闭fancybox灯箱?
- sql - 是否可以复制 Azure DevOps 构建并在本地运行它?
- c# - 如何在 Blazor 服务器中设置同意 cookie
- c# - 如何解决 bot 框架模拟器中的 404 post 错误,因为在 godadday 上使用托管 url?
- kotlin - 从协程中使用 runBlocking 会发生一些不好的事情吗?
- javascript - 如何将构建反应应用程序(js,css)添加到 laravel 后端服务器
- c++ - 数组超出范围 MQL5 循环
- python - beautifulsoup div extract