簡體   English   中英

我的 Google 身份驗證代碼給我錯誤 ReferenceError: id is not defined

[英]My code for Authentification on Google is giving me the error ReferenceError: id is not defined

所以這是我的代碼,給我帶來了身份驗證問題。 我不知道如何獲取 id,因為它已經創建了。

require('dotenv').config()



const express = require ("express");
const bodyParser = require ("body-parser");
const ejs = require ("ejs");
const mongoose = require ("mongoose")
const md5 = require ("md5");
const saltRounds = 10;
var bcrypt = require('bcryptjs');
const session = require('express-session');
const passport = require ("passport");
const passportLocalMongoose = require ("passport-local-mongoose");
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const findOrCreate = require ("mongoose-findorcreate");



const app = express();



app.use(session({
  secret: "our little secret",
  resave: false,
  saveUninitialized:false
}));

app.use(passport.initialize());
app.use(passport.session());

mongoose.connect("mongodb://localhost:27017/userDB", {useNewUrlParser:true});


const userSchema = new mongoose.Schema({
  email: String,
  password: String,
  googleID: String
});

userSchema.plugin(passportLocalMongoose);
userSchema.plugin(findOrCreate);



const User = new mongoose.model ("User", userSchema);

passport.use(User.createStrategy());


passport.serializeUser(function(user, done) {
  done(null, user, id);
});

passport.deserializeUser(function(id,done) {
  User.findById(id, function(err, user) {
    done(err, user);
  });
});

passport.use(new GoogleStrategy({
    clientID: process.env.CLIENT_ID,
    clientSecret: process.env.CLIENT_SECRET,
    callbackURL: "http://localhost:3000/auth/google/secrets",
  },
  function(accessToken, refreshToken, profile, cb) {
    console.log(profile);

    User.findOrCreate({ googleId: profile.id }, function (err, user) {
      return cb(err, user);
    });
  }
));


app.use(express.static("public"));
app.set("view engine", "ejs");
app.use (bodyParser.urlencoded({
  extended:true
}));




app.get ("/", function (req, res) {
  res.render("home");
});

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

    app.get('/auth/google/callback',
        passport.authenticate('google', {
            successRedirect: '/profile',
            failureRedirect: '/fail'
        })
    );

    app.get('/auth/google/secrets',
  passport.authenticate('google', { failureRedirect: '/login' }),
  function(req, res) {
    // Successful authentication, redirect home.
    res.redirect('/secrets');
  });

app.get ("/login", function (req, res) {
  res.render("login");
});

app.get ("/register", function (req, res) {
  res.render("register");
});

app.get("/secrets", function (req,res) {
  if (req.isAuthenticated()){
    res.render("secrets");
  }else {
    res.rendirect("/login");
  }
})

app.get("/logout", function (req, res) {
  req.logout();
  res.redirect ("/");
});


app.post ("/register", function(req, res) {

  User.register({username: req.body.username}, req.body.password, function(err, user){
  if (err){
    console.log(err);
    res.redirect("/register");
  } else
  passport.authenticate("local") (req, res, function(){
    res.redirect("/secrets");
  });
});
});





app.post("/login", function(req,res){

const user = new User ({
    username: req.body.username,
    password: req.body.password
});

req.login(user, function(err){
  if(err) {
    console.log(err);
  }else {
    passport.authenticated("local")(req,res, function() {
      res.redirect("/secrets");
    });
  }
});

});


app.listen(3000, function() {
  console.log("Server started on port 3000")
});

因此,當我嘗試運行我的代碼時,我的系統中始終出現相同的錯誤。

ReferenceError: id 未定義在 /Users/vivianaandrango/Desktop/Alberto/Secrets code/app.js:55:20 at pass (/Users/vivianaandrango/Desktop/Alberto/Secrets code/node_modules/passport/lib/authenticator.js :291:9) 在 SessionManager.logIn (/Users/vivianaandrango/Desktop/Alberto/秘密代碼/node_modules/passport/lib/sessionmanager.js:14:8) 在 IncomingMessage.req.login.req.logIn (/Users/vivianaandrango/Desktop/Alberto/Secrets code/node_modules/passport/lib/http/request. js:39:26) 在 Strategy.strategy.success (/Users/vivianaandrango/Desktop/Alberto/Secrets code/node_modules/passport/lib/middleware/authenticate.js:256:13) 在驗證 (/Users/vivianaandrango/Desktop /Alberto/Secrets code/node_modules/passport-oauth2/lib/strategy.js:189:20) 在/Users/vivianaandrango/Desktop/Alberto/Secrets code/app.js:73:14 在/Users/vivianaandrango/Desktop/阿爾貝托/秘密代碼/n ode_modules/mongoose-findorcreate/index.js:47:11 在/Users/vivianaandrango/Desktop/Alberto/Secrets code/node_modules/mongoose/lib/model.js:4999:1

更新

當我添加到代碼中

passport.serializeUser(function(user, done, id) {

完成(空,用戶,ID); });

系統返回我所有的數據,但在 Hyper 上我得到所有的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM