我正在创建一个登录页面使用反应,它允许用户使用Facebook,谷歌登录,或使用用户名和密码。我只是意识到,每次我使用Facebook登录时,都会两次调用onSubmit。只有Facebook身份验证导致此问题。正因为如此,我的后端验证被调用,并返回一个res.jsonmsg,这将在前端返回一个错误msg。如果用户决定使用Facebook登录,如何避免这种情况发生?我在社交媒体登录方面使用了反应-脸书-登录和反应-谷歌-登录。
facebook按钮
const handleFacebookLogin = async (res) => {
dispatch(loginUser({ isFacebookId: res?.userID }));
};
<FacebookLogin
appId='code'
callback={handleFacebookLogin}
render={(renderProps) => (
<button
onClick={renderProps.onClick}
className='w-full font-sans text-xs flex items-center focus:outline-none'
>
<FontAwesomeIcon
icon={faFacebookF}
className='svg-size fill-current text-blue-600'
/>
<span className='w-full'>Sign In with Facebook</span>
</button>
)}
/>
后端导出常量loginUser=async(req, res)=
try {
if (isFacebookId) {
const chkUser = await userModel.findOne({ isFacebookId: isFacebookId });
if (chkUser) {
if (!chkUser.isActive) {
return res.status(400).json({
msg: `The account is not yet activated.
\n Please check your email for account activation link.`,
activation: true,
});
} else {
return res.status(200).json({
_id: chkUser._id,
email: chkUser.email,
username: chkUser.username,
name: chkUser.name,
isAdmin: chkUser.isAdmin,
msg: 'Login Success',
tokenId: createRefreshToken(chkUser._id),
});
}
} else {
return res.status(400).json({
msg: 'This Facebook account is not register yet. Please register using this ',
googleId: true,
});
}
} else if (isGoogleId) {
const chkUser = await userModel.findOne({ isGoogleId: isGoogleId });
if (chkUser) {
if (!chkUser.isActive) {
return res.status(400).json({
msg: `The account is not yet activated.
\n Please check your email for account activation link.`,
activation: true,
});
} else {
return res.status(200).json({
_id: chkUser._id,
email: chkUser.email,
username: chkUser.username,
name: chkUser.name,
isAdmin: chkUser.isAdmin,
msg: 'Login Success',
tokenId: createRefreshToken(chkUser._id),
});
}
} else {
return res.status(400).json({
msg: 'This Google account is not register yet. Please register using this ',
googleId: true,
});
}
} else if (!username && !email) {
console.log('ta3');
return res.status(400).json({
msg: 'Please Provide a Username or Email',
username: true,
});
} else if (!password) {
return res.status(400).json({
msg: 'Please Provide a Password',
password: true,
});
} else {
if (username) {
const isEmail = (val) => {
var data =
/(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/;
return data.test(val);
};
if (isEmail(username) === true) {
email = username;
}
let chkUsernameEmail = email
? { email: username }
: { username: username };
const chkUser = await userModel.findOne(chkUsernameEmail);
if (!chkUser) {
return res.status(400).json({
msg: 'Invalid Username or Email',
username: true,
});
} else {
if (!chkUser.isActive) {
return res.status(400).json({
msg: `The account is not yet activated.
\n Please check your email for account activation link.`,
activation: true,
});
} else {
if (chkUser && (await chkUser.matchPassword(password))) {
res.json({
_id: chkUser._id,
email: chkUser.email,
username: chkUser.username,
name: chkUser.name,
isAdmin: chkUser.isAdmin,
msg: 'Login Success',
tokenId: createRefreshToken(chkUser._id),
});
} else {
return res.status(400).json({
msg: 'Invalid Password',
password: true,
});
}
}
}
}
}
} catch (error) {
res.status(500).json({ msg: error.message });
}
我想在调用API时只需禁用UI上的按钮。
我想知道正常的java API调用(我的意思是没有I/O的方法)是否应该被线程化为“迷你阻塞调用”?是否可以像这样实现Reactive Streams(在返回Publisher之前调用方法): 而不是(在流中调用它) 此验证器仅用于示例。这种方法是否有任何缺点,或者这些方法在返回语句之前应该总是包含在流中?
我已将JDK升级到版本17。现在,当我尝试在Quarkus上运行optaplanner来运行参数化单元测试时,我得到以下stacktrace: 在读了一点关于这种问题的内容后,我补充道 在以下部分中到我的Maven POM:Quarkus-maven-plugin config和maven-surefire-config 并且在配置文件本机的maven-故障安全-插件配置中: 它确实按预期工作:测
我无法理解为什么我的AppReact组件呈现两次,如下面的gif所示。 我插入了一个控制台。在返回组件之前记录日志,查看组件渲染的次数。 每当我移除useState钩子时,我的应用程序只会呈现一次我认为应该呈现的效果。任何关于为什么会发生这种情况的指导都是受欢迎的
问题内容: 我正在尝试模拟一些基于反射的方法。您可以在下面看到详细信息, 被测课程 测试 } 要么 但是,测试失败,并显示NullPointerException。我知道我在嘲笑概念上做错了什么,但是我不明白这是什么。您能否对此加以说明,并建议我如何测试此方法? 谢谢。 问题答案: 您需要一个Method对象和一个Class对象。根据您的评论,Mockito无法模拟方法,因此您需要一个真正的方法。
所以就像标题所说的,我的应用程序的主页因为某种原因渲染了两次,我不知道为什么。从我的浏览器路由器,我最初调用一个JS文件,从那里我调用我的HomePage组件和React路由器,但然后我的页面渲染两次,我不知道为什么。 我的浏览器路由器(index.js): 然后pp.js被称为: 然后我的主页组件(index.jsx): 和路线。js: 但是我的页面是这样渲染的: 我真的很困惑,所以任何建议都会
我确信这是标准的,众所周知的行为,但我不知道如何修复它。每当我使用setState(在本例中是setTheirpokeOn)时,闭包运行两次。为了让它“一次”运行,我必须在顶部添加额外的变量,以检查它是否已经运行,如果已经运行,则将其设置为之前的状态。 有没有更好的方法,或者只运行一次?谢谢 澄清: 该组件位于useEffect内部,具有一个空的依赖性数组,因此我认为它应该只在mount上运行。钩