0

服务器.js

import express from "express";
import passport from "passport";
const cookieSession = require("cookie-session");
import mongoConnect from "./mongodb/mongoconnect.js";
const passportgoogle = require("./passport/passport.js");

let port = process.env.PORT || 8000;

const app = express();

app.use(express.json());
app.use(
  express.urlencoded({
    extended: true,
  })
);

//mongodb
mongoConnect();
app.use(
  cookieSession({
    keys: ["hellofromotherside"],
    maxAge: 24 * 60 * 60 * 1000,
  })
);
//passport.js
app.use(passport.initialize());
app.use(passport.session());

app.use(function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "https://goodtube-new.web.app");
  res.header(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept"
  );
  res.header("Access-Control-Allow-Methods", "GET,PUT,POST,OPTIONS,DELETE");
  next();
});

///////
//Routes

护照.js

//Google strategy
passport.use(
  new GoogleStrategy(
    {
      clientID:
        "hidden",
      clientSecret: "hidden"
      callbackURL: "/auth/google/login",
    },
    function (accessToken, refreshToken, profile, done) {
      console.log('google str: ', profile);
      //
      userObj.findOne({ email: profile._json.email }).then((user) => {
        if (user) {
          console.log('monog user: ', user);
          //user already there
          if (profile.id !== user.googleid) {
            userObj.updateOne({ _id: user._id }, { $set: { imageurl: profile._json.picture, googleid: profile.id } })
              .then(r => {
                let userObj = user.toObject();
                console.log('userOBJ: ', userObj);
                done(null, { ...userObj, imageurl: profile._json.picture, googleid: profile.id })
              })
              .catch(err => {
                console.log('registered user ERR:: ', err);
                done(err)
              })
          }
          else {
            done(null, user);
          }
        } else {
          //if user is not available in database

          let newUser = new userObj({
            googleid: profile.id,
            username: profile.displayName.split(' ')[0],
            name: profile.displayName,
            imageurl: profile._json.picture,
            email: profile._json.email,
          });
          newUser.save().then((userres) => {
            done(null, userres);
          })
            .catch(err => {
              console.log('new user ERR: ', err);
              done(err)
            })
        }

      });
    }
  )
);

在上面的谷歌用户详细信息中成功来自谷歌。

用户路由.js

// called by client or browser
router.get(
  "/login/google",
  passport.authenticate("google", { scope: ["profile", "email"] })
);

//callback for googleAuthApi
router.get(
  "/google/login",
  passport.authenticate("google", {
    successRedirect:"https://goodtube-new.web.app/loginsuccess",
    failureRedirect:"https://goodtube-new.web.app/loginfailed"
  })
);

在上面的用户被成功重定向到前端。/登录成功

不工作:前端:[https://goodtube-new.web.app] 后端:[https://goodtube-server.herokuapp.com]

问题:无法在客户端上添加登录会话。(表达:会话)。重定向后无法在服务器上授权客户端,似乎没有创建视觉。

工作:它在这里工作:[http://goodtube1.herokuapp.com],其中前端和后端位于同一来源或域。

4

0 回答 0