0

req.isAuthenticated 和 req.logout 似乎不起作用,并在我的项目中标记为“不是函数”。这是该项目的代码。我的验证功能似乎没有按预期工作。除了我现在在 udemy 上观看的付费教程之外,我还处理了其他视频教程,但我在结束时遇到了同样的错误,或者我的会话没有存储。

const http = require("http");
const path = require("path");
const express = require("express");
const helmet = require("helmet");
const passport = require("passport");
const cookieSession = require("cookie-session");
const googleStrategy = require("passport-google-oauth20").Strategy;
require("dotenv").config();

const PORT = 8000;
const G_CONF = {
  clientID: process.env.GOOGLE_CLIENT_ID,
  clientSecret: process.env.GOOGLE_CLIENT_SECRET,
  callbackURL: "/auth/google/cb",
};
const CC_CONF = {
  name: "session",
  maxAge: 60 * 60 * 1000,
  keys: [process.env.COOKIE_KEY_00, process.env.COOKIE_KEY_01],
  secure: false,
  httpOnly: true,
};

const app = express();
const server = http.createServer(app);

function verifyUser(req, res, next) {
  const loggedIn = req.user;
  console.log(loggedIn);
  if (req.user === undefined) {
    return res.status(401).json({ error: "you must log in" });
  }
  next();
}

passport.use(
  new googleStrategy(G_CONF, (accessToken, refreshToken, profile, done) => {
    done(null, profile);
  })
);

// Serializes or push authenticated user to session.
passport.serializeUser((user, done) => {
  done(null, user.id);
});

// Deserializes or pull authenticated user from subsequent session request.
passport.deserializeUser((id, done) => {
  done(err, user);
});

app.use(helmet());
app.use(cookieSession(CC_CONF));
app.use(passport.initialize());

app.get("/", (req, res) => {
  res.status(200).sendFile(path.join(__dirname, "public", "index.html"));
});

app.get(
  "/auth/google",
  passport.authenticate("google", { scope: ["profile"] })
);

app.get(
  "/auth/google/cb",
  passport.authenticate("google", {
    failureRedirect: "/failed",
    successRedirect: "/success",
    session: true,
  })
);

app.get("/secret", verifyUser, (req, res, next) => {
  res.send("secret");
});

app.get("/failed", (req, res) => {
  res.sendFile(path.join(__dirname, "public", "failed.html"));
});

app.get("/success", (req, res) => {
  res.status(200).sendFile(path.join(__dirname, "public", "success.html"));
});

app.get("/auth/logout", (req, res) => {
  req.logout();
  res.redirect("/");
});

server.listen(PORT, (err) => {
  if (err) {
    console.error(err);
  }
  console.log("Auth Server running on port 8000");
});

  • 当我登录“用户”时,我得到“未定义”
  • 我的验证似乎无法正常工作
  • passportjs req.method() 不起作用。
4

0 回答 0