Методы сериализации и десериализации не вызываются отдельно

Я использовал локальную стратегию Passport ранее в своем последнем проекте, в этом> проекте я использую как стратегию google oauth 2.0, так и локальную стратегию passport,> проблема, с которой я сталкиваюсь, заключается в том, что метод serialzeUser и десериализация пользователя обеих стратегий не вызываются по отдельности, если первая стратегия использует собственный метод сериализации и десериализации, а вторая - метод сериализации и десериализации первого и наоборот. Мой вопрос заключается в том, что какие изменения кода я должен сделать, чтобы метод сериализации и десериализации обеих стратегий вызывался по-разному и устанавливал свой собственный сеанс отдельно.

Файл локальной стратегии

это файл локальной стратегии Passport, он работает нормально, при вводе правильного адреса электронной почты и пароля в форме входа в систему, он возвращает объект пользователя, но, несмотря на это, пользователь не попадает в сеанс, поскольку его методы serilize и deserilize не получают называется.

 const LocalStrategy=require('passport-local').Strategy;
const mongoose = require('mongoose');
const bcrypt=require('bcryptjs');
const passport=require('passport');
//const User =require('../models/CUser')
//Load user Model



require('../models/CUser');
const User = mongoose.model('CUsers');


module.exports=function(localC){
console.log(localC)
    //local Strategy
console.log("inside passport...........");

localC.use(
    new LocalStrategy({
        usernameField:'email'},(email,password,done)=>{
//match usernaame
console.log(email);
console.log(password)
let query ={email:email};

User.findOne(query , function(err,user){
    console.log("Before error")
    if(err) throw err;
if(!user){

    return done(null,false,{message:'No user Found'});

}

bcrypt.compare(password,user.password,function(err,isMatch){
    console.log("In compare function......")
if(err) throw err;
if(isMatch){

    console.log("here......")
    console.log(user)
    return done(null,user);

}else{
    return done(null,false,{message:'Wrong password'})
}

})

})



    }))


    passport.serializeUser(function(user, done) {
          console.log("in serialize of local strategy............")
        done(null, user.id);
      });


    passport.deserializeUser(function(id, done) {
          console.log("in deserialize of local strategy........")
        User.findById(id, function(err, user) {
          done(err, user);
        });
      });


}

Файл стратегии Google Oauth

    const GoogleStrategy=require('passport-google-oauth20').Strategy;
const mongoose = require('mongoose');
const keys = require('./keys');
const passport = require('passport');

const User =mongoose.model('users');

module.exports=function(googleS){

googleS.use(
    new GoogleStrategy({
        clientID:keys.googleClientID,
        clientSecret:keys.googleClientSecret,
        callbackURL:'/auth/google/callback',
        proxy:true
    },(accessToken,refreshToken,profile,done)=>{

        // console.log("This is access token......................................................");
        // console.log(accessToken);
        // console.log("This is profile...............................");
        // console.log(profile);
        const image = profile.photos[0].value.substring(0, profile.photos[0].value.indexOf('?'));

        const newUser = {
            googleID:profile.id,
            firstName:profile.name.givenName,
            lastName:profile.name.familyName,
            email:profile.emails[0].value,
            image:image
        }

//check for existing model
User.findOne({
    googleID:profile.id
}).then( user=>{

if(user){
    done(null,user);
}else{

    new User(newUser)
    .save()
    .then(user => done(null,user));

}


} )

    })
)


passport.serializeUser( (user,done)=>{
    console.log("in serialize  of oauth.............")
    done(null,user.id);
} );

passport.deserializeUser( (id,done)=>{
    console.log("in deserialize of oauth.....................")
    User.findById(id).then(user =>done(null,user));

} );

}

Файл app.js

это файл app.js,

    const express = require("express");
const path = require("path");
const exphbs = require("express-handlebars");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const passport = require("passport");
const Cpassport=require('./config/Cpassport');

const cookieParser = require("cookie-parser");
const session = require("express-session");
const methodOverride = require("method-override");
const flash = require("express-flash");
const mailer = require("express-mailer");
//Handlebars helpers
const {
  truncate,
  stripTags,
  formatDate,
  select,
  editIcon
} = require("./helpers/hbs");

var googleS = new passport.Passport();
var localS = new passport.Passport();


const app = express();
//set static folder

app.use(express.static(path.join(__dirname, "public")));

//load keys
const keys = require("./config/keys");

//Map global Promises
mongoose.Promise = global.Promise;

//Mongoose Connection

mongoose
  .connect(keys.mongoURI)
  .then(() => console.log("MongoDB Connected"))
  .catch(err => console.log(err));

//load user model
require("./models/User");
//story model
require("./models/Story");

//feedback model
require("./models/Feedback");

//local strategy model
require("./models/CUser");

//session
app.use(cookieParser());

app.use(
  session({
    secret: "secret",
    resave: true,
    saveUninitialized: true
  })
);

//passport config
require("./config/passport")(googleS);
require("./config/Cpassport")(localS);

//Passport Middleware
app.use(passport.initialize());
app.use(passport.session());

//flash middleware
app.use(flash());

//set global variables
app.use((req, res, next) => {
  res.locals.success_msg = req.flash("success_msg");
  res.locals.error_msg = req.flash("error_msg");
  res.locals.error = req.flash("error");
  res.locals.user = req.user || null;
  // res.locals.userr = req.userr || null;


  console.log("this is requested user");
  console.log(res.locals.user);
  // console.log(res.locals.userr);

   next();
});

// Load Routes
const auth = require("./routes/auth");
const index = require("./routes/index");
const stories = require("./routes/stories");
const mailOptions = require("./helper/mailer");

//body-parser middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

//method overriding body parser
app.use(methodOverride("_method"));

//mailer
mailer.extend(app, {
  from: "Belle Solutions",
  host: "smtp.gmail.com",
  secureConnection: true,
  port: 465,
  transportMethod: "SMTP",
  auth: {
    user: keys.email,
    pass: keys.pass
  }
});

//handlebars
app.engine(
  "handlebars",
  exphbs({
    helpers: {
      truncate: truncate,
      stripTags: stripTags,
      formatDate: formatDate,
      select: select,
      editIcon: editIcon
    },

    defaultLayout: "main"
  })
);



// app.get('*' , function(req ,res ,next){
//   res.locals.user=req.user || null;
//   console.log(req.user);
//   console.log('printing user');
//   console.log(res.locals.user);

//   next();
//   })




app.set("view engine", "handlebars");

//use routes
app.use("/auth", auth);
app.use("/", index);
app.use("/stories", stories);

const port = process.env.PORT || 5000;

app.listen(port, () => {
  console.log(`Server started on port ${port}`);
});

Любая помощь или предложение действительно приветствуется.

0 ответов

Другие вопросы по тегам