我正在尝试将谷歌登录与 Redux 集成到我的应用程序(MERN)电子商务网站。当我使用电子邮件和密码登录时,一切正常,当我使用谷歌登录时,它也可以正常工作,但是有些部分我无法再访问,我得到 res.status 401 0r 500 取决于。如果我记录我的 userInfo 一切都是一样的......我很绝望。我的问题是这看起来像是谷歌问题还是编码问题。如果是代码问题,可以在需要时共享代码片段
问问题
38 次
1 回答
0
//////控制器///////
const client = new OAuth2Client(process.env.GOOGLE_CLIENT_ID);
const googleLogin = asyncHandler(async (req, res) => {
const { idToken } = req.body;
client
.verifyIdToken({ idToken, audience: process.env.GOOGLE_CLIENT_ID })
.then((response) => {
console.log("GOOGLE LOGIN RESPONSE", response);
const { email_verified, name, email } = response.payload;
console.log("=====>", response.payload);
if (email_verified) {
User.findOne({ email }).exec((err, user) => {
if (user) {
const token = jwt.sign({ _id: user._id }, process.env.JWT_SECRET, {
expiresIn: "7d",
});
const { _id, email, name, isAdmin } = user;
return res.json({ _id, email, name, isAdmin, token });
} else {
let password = email + process.env.JWT_SECRET;
user = new User({ name, email, password });
user.save((err, data) => {
if (err) {
console.log("ERROR GOOGLE LOGIN ON USER SAVE", err);
return res.status(400).json({
error: "User signup failed with google",
});
}
const token = jwt.sign(
{ _id: data._id },
process.env.JWT_SECRET,
{ expiresIn: "7d" }
);
const { _id, email, name, isAdmin } = data;
return res.json({ _id, email, name, isAdmin, token });
});
}
});
} else {
return res.status(400).json({
error: "Google login failed. Try again",
});
}
});
});
/////谷歌//////
import React from "react";
import axios from "axios";
import GoogleLogin from "react-google-login";
const Google = ({ googleLog }) => {
const responseGoogle = (response) => {
console.log(response.tokenId);
axios({
method: "POST",
url: `${process.env.REACT_APP_API}/google-login`,
data: { idToken: response.tokenId },
})
.then((response) => {
console.log("GOOGLE LOGIN SUCCESS", response.data);
googleLog(response.data);
localStorage.setItem("userInfo", JSON.stringify(response.data));
})
.catch((error) => {
console.log("GOOGLE LOGIN ERROR", error);
});
};
return (
<div className="pb-3">
<GoogleLogin
clientId={`${process.env.REACT_APP_GOOGLE_CLIENT_ID}`}
//clientId="554514820450-
je21h5tlk31a62mm1hv1kj8p8vf497si.apps.googleusercontent.com"
onSuccess={responseGoogle}
onFailure={responseGoogle}
render={(renderProps) => (
<button
onClick={renderProps.onClick}
disabled={renderProps.disabled}
className="btn btn-danger btn-md btn-block"
>
{" "}
<i className="fab fa-google pr-2"></i>
login with google
</button>
)}
cookiePolicy={"single_host_origin"}
/>
</div>
);
};
export default Google;
////登录屏幕/////
const googleLog = (response) => {
console.log("googlelogin response =>", response.isAdmin);
dispatch({
type: USER_LOGIN_SUCCESS,
payload: response,
});
if (dispatch) {
const push = history.push;
setTimeout(() => push(redirect), 2000);
}
};
于 2021-05-17T19:29:07.040 回答