Паспорт req.user не определен - PullRequest
0 голосов
/ 19 апреля 2020

Я понимаю, что этот вопрос задавался здесь раньше, но ответы на эти вопросы мне совсем не помогли.

После успешной аутентификации моего пользователя по паспорту с "@ 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.
...