Я понимаю, что этот вопрос задавался здесь раньше, но ответы на эти вопросы мне совсем не помогли.
После успешной аутентификации моего пользователя по паспорту с "@ oauth- Стратегия everything / passport-discord ", req.user все еще не определен.
Вот код в моем главном файле,
// Modules
const compression = require("compression"),
cookieParser = require("cookie-parser"),
cors = require("cors"),
express = require("express"),
exphbs = require("express-handlebars"),
session = require("express-session"),
logger = require("morgan"),
path = require("path"),
createError = require("http-errors"),
mongoose = require("mongoose"),
debug = require("debug"),
flash = require("connect-flash"),
passport = require("passport");
// Local files
const setupPassport = require("./src/setupPassport");
// Passport
setupPassport(passport);
// Mongoose
mongoose.connect("mongodb://localhost/website", {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => {
debug("sb:mongoose")("Successfully connected to mongodb.");
}).catch(e => {
debug("sb:mongoose")("Unable to connect to mongodb\n" + e);
});
// Routers
const indexRouter = require("./routes/index");
const loginRouter = require("./routes/login");
// App setup
const app = express();
app.set("views", path.join(__dirname, "views/pages"));
// View engine
app.engine("hbs", exphbs({
defaultLayout: "user",
layoutsDir: "./views/layouts/",
partialsDir: "./views/parials/",
extname: "hbs"
}));
app.set("view engine", "hbs");
// Middleware
app.use(logger("dev"));
app.use(compression());
app.use(express.json());
app.use(express.urlencoded({extended: false}));
app.use(cookieParser());
app.use(session({
secret: "replace with env secret",
resave: false,
saveUninitialized: true,
cookie: {secure: true}
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(cors());
app.use(flash());
Это мой файл паспорта установки
const pprt = require("passport");
const { Strategy, Scope } = require("@oauth-everything/passport-discord");
const User = require("../models/user");
/**
* @param {pprt} passport
*/
module.exports = (passport) => {
passport.serializeUser((user, done) => {
return done(null, user.id);
});
passport.deserializeUser(async (id, done) => {
User.findById(id, (err, res) => {
if (err) return done(err);
return done(null, res);
});
});
passport.use(new Strategy(
{
clientID: "no",
clientSecret: "no way",
callbackURL: "http://localhost:3000/login/auth/callback",
scope: [Scope.EMAIL, Scope.IDENTIFY]
},
(accessToken, refreshToken, profile, cb) => {
User.findOne({user_id: profile.id}, (err, res) => {
if (err) return cb(err);
if (!res) {
let newUser = new User({
user_id: profile.id,
username: profile.username,
displayName: profile.displayName,
email: profile.emails[0].value,
verified: profile.emails[0].verified,
tokens: {
access: accessToken,
refresh: refreshToken
}
});
newUser.save().then(user => {
cb(null, user);
});
} else {
res.updateOne({
user_id: profile.id,
username: profile.username,
displayName: profile.displayName,
email: profile.emails[0].value,
verified: profile.emails[0].verified,
tokens: {
access: accessToken,
refresh: refreshToken
}
}, (err, user) => {
if (err) return cb(err);
cb(null, user);
});
}
});
}
));
};
as i said req.user still returns undefined even after successful authentication does anyone have any idea why?
I should also mention that the user object is saved to mongodb perfectly which is why this perplexes me so much.