【发布时间】:2021-11-04 07:25:34
【问题描述】:
我正在开发一个应用程序,该应用程序会在指定的非活动时间后将用户注销。我有一个 AuthContext 来跟踪用户的身份验证状态。当应用程序使用来自react-plaid-link 的exit function 注销用户时,我尝试退出 PlaidLink 模式。问题是,调用 exit 函数什么也没做。这是我当前的实现。
import React, { useCallback, useEffect, useContext } from "react";
import { usePlaidLink } from "react-plaid-link";
import { LinkedAccountsDispatchContext } from "../hooks/linkedAccountsContext";
import { AuthContext } from "../hooks/authContext";
import Button from "../components/Button";
const PlaidLink = ({
linkToken,
updateMode,
className,
accountId,
plaidButtonName = "Link accounts",
onClick = () => {},
}) => {
const { createLinkedItem, updateExpiredItem } = useContext(
LinkedAccountsDispatchContext
);
const { logged } = useContext(AuthContext);
async function handleSuccess(publicToken) {
await createLinkedItem(publicToken);
}
async function handleUpdateSuccess() {
await updateExpiredItem(accountId);
}
const onSuccess = useCallback(handleSuccess, [createLinkedItem]);
const onUpdateSuccess = useCallback(handleUpdateSuccess, [
accountId,
updateExpiredItem,
]);
const config = {
token: linkToken,
onSuccess: updateMode ? onUpdateSuccess : onSuccess,
};
const { open, ready, exit } = usePlaidLink(config);
const handleClick = () => {
onClick();
open();
};
useEffect(() => {
if (!updateMode || !ready) {
return;
}
open();
}, [ready, updateMode, open]);
useEffect(() => {
if (!logged) {
// This does nothing.
exit({ force: true });
}
}, [logged, exit]);
return updateMode ? null : (
<Button onClick={handleClick} disabled={!ready} className={className}>
{plaidButtonName}
</Button>
);
};
export default PlaidLink;
请问在这种情况下使用退出函数的正确方法是什么?
更新:
试用 vanilla js 版本也会出现同样的问题。
const btn = document.querySelector('#btn');
const { open, exit } = Plaid.create({
token: "GENERATED_LINK_TOKEN",
onSuccess: (public_token, metadata) => {},
onLoad: () => {},
onExit: (err, metadata) => {},
onEvent: (eventName, metadata) => {},
});
btn.addEventListener('click', async() => {
open();
setTimeout(() => {
alert('...exiting');
exit({
force: true
});
}, 15000);
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="https://cdn.plaid.com/link/v2/stable/link-initialize.js"></script>
<title>Plaid Link Demo</title>
</head>
<body>
<button id="btn">Link Account</button>
<script type="module" src="./js/main.js"></script>
</body>
</html>
【问题讨论】:
标签: javascript reactjs plaid