【问题标题】:ReferenceError: user is not defined. Passport and Google. User Schema already createdReferenceError:未定义用户。护照和谷歌。已创建用户架构
【发布时间】:2021-03-10 16:07:19
【问题描述】:

我在平台上发现了类似的问题,但他们提供的答案是创建用户模式。 Tat 我已经完成了,也许。请帮帮我。

mongoose.set("useCreateIndex", true);
const Schema = mongoose.Schema;
const userSchema = new Schema({
  email: String,
  password: String,
  googleId: String
});

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

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

passport.use(User.createStrategy());

我正在尝试使用 google 登录对用户进行身份验证,当我尝试向 google 注册时出现这样的错误

ReferenceError: 用户未定义。

我的应用是这样的:

const express = require("express");
const ejs = require("ejs");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const bcrypt = require("bcrypt");
const saltRounds = 10;
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(express.static("public"));
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({
  extended: true
}));
app.use(session({
  secret: "we are on!",
  resave: false,
  saveUninitialized: false
}));

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

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

mongoose.set("useCreateIndex", true);
const Schema = mongoose.Schema;
const userSchema = new Schema({
  email: String,
  password: String,
  googleId: String
});

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

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

passport.use(User.createStrategy());

passport.serializeUser(function(id, 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",
    userProfileURL: "https://www.googleapis.com/oauth2/v3/userinfo"
  },
  function(accessToken, refreshToken, profile, cb) {
    console.log(profile);
    User.findOrCreate({ googleId: profile.id }, function (err, user) {
      console.log("THE USER: ", user);
      return cb(err, user);
    });
  }
));

错误向反序列化用户中的用户指出,我不知道如何修复它。请帮忙!

【问题讨论】:

    标签: node.js express mongoose passport.js google-authentication


    【解决方案1】:

    我已经解决了,我打电话给一个我从未声明过的用户。 这是解决的代码,只是错误的部分

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

    【讨论】:

    • 在回调函数中我声明了 id 而不是 user
    猜你喜欢
    • 2019-06-13
    • 2012-08-28
    • 1970-01-01
    • 2018-02-14
    • 2014-10-20
    • 2014-07-27
    • 2016-07-07
    • 1970-01-01
    相关资源
    最近更新 更多