谷歌登录问题

时间:2021-05-17 18:24:13

标签: authentication react-google-login

我正在尝试使用 Redux 将 google 登录集成到我的应用程序 (MERN) 电子商务站点。当我使用电子邮件和密码登录时,一切正常,当我使用 google 登录时也能正常工作,但是有些部分我无法再访问,我得到 res.status 401 0r 500 取决于。如果我记录我的 userInfo 一切都一样......我很绝望。 我的问题是这看起来像是谷歌问题还是编码问题。 如果是代码问题可以在需要时共享代码片段

1 个答案:

答案 0 :(得分: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);
  }
 };