Passport.js - локальная стратегия не аутентифицируется

Я создал простое приложение, которое позволяет пользователям входить в систему через Google, используя стратегию Google для паспорта, и все это прекрасно работает.

Я тоже пытаюсь добавить местную стратегию, но не могу найти решение.

База данных работает нормально, так как пользователи создаются в процессе регистрации. Но перенаправление на /profile не работает сразу после регистрации. Вместо этого я перенаправлен на страницу входа; это обычно происходит, когда пользователь пытается посетить /profile страница, но не вошел в систему.

Вход в систему, кажется, сначала работает, так как я перенаправлен на "/" как и ожидалось с successRedirect: "/", Но если я попытаюсь перейти на страницу профиля, я не смогу. Кроме того, если я бегу req.isAuthenticated()он возвращает ложь.

РЕДАКТИРОВАТЬ: кажется, что аутентификация сама работает, но как-то не поспевает. Если я бегу console.log("req.isAuthenticated") сразу после регистрации возвращается true, но как только я перехожу на другой маршрут (пример: /), запустив console.log("req.isAuthenticated") в get Запрос этого маршрута я получаю ложным. Я могу войти, но не могу войти. Может ли это быть связано с куки? Кто-нибудь знает как решить?

Вот некоторый код:

app.js

const   express           = require("express"),
        mongoose          = require("mongoose"),
        bodyParser        = require("body-parser"),
        cookieSession     = require("cookie-session"),
        passport          = require("passport");  


const keys = require("./config/keys"); // requiring keys
const passportSetup = require("./config/passport-setup"); //requiring passport config
const localPassportSetup = require("./config/passport-local-setup"); // requiring local passport config
const authRoutes = require("./routes/auth"); // requiring auth routes
const profileRoutes = require("./routes/profile");
const Thought = require("./models/thought"); // requiring Thought model

//Initialize express app
const app = express();

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

app.use(cookieSession({
    maxAge: 24 * 60 * 60 * 1000,
    keys: [keys.session.cookieKey]
}));

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

app.use("/auth", authRoutes); // setup auth routes
app.use("/profile", profileRoutes); // setup profile routes

mongoose.connect('mongodb://localhost/thoughtApp'); // connecting database

паспорт местного setup.js

const passport = require("passport");
const localStrategy = require("passport-local");
const mongoose = require("mongoose");

const LocalUser = require("../models/localUser");

passport.use(new localStrategy(LocalUser.authenticate()))
passport.serializeUser(LocalUser.serializeUser());
passport.deserializeUser(LocalUser.deserializeUser());

auth.js

const router = require("express").Router();
const passport = require("passport");
const passportLocal = require("passport-local");
const localUser = require("../models/localUser");

const authCheck = function (req, res, next) {
    if (!req.user) {
        next();
    } else {
        res.redirect("/");
    }
};
//login

router.get("/login", authCheck, (req, res) => {
    res.render("login", {user: req.user});
});

router.post("/login", passport.authenticate("local", {
    successRedirect: "/",
    failureRedirect: "/login"
}), (req, res) => {

});
// logout
router.get("/logout", (req, res) => {
    //handle with passport
    req.logout();
    res.redirect("/");
});

//register
router.get("/signup", authCheck, (req, res) => {
    res.render("signup", {user: req.user});
});

router.post("/signup", (req, res) => {
    const newUser = new localUser({username: req.body.username});
    localUser.register(newUser, req.body.password, (err, user) => {
        if(err) {
            console.log(err);
            return res.render("/signup");
        }
        passport.authenticate("local")(req, res, function(){
            console.log(req.user);
            res.redirect("/profile");
        });
    })
});

localUser.js

const mongoose = require("mongoose");
const passportLocalMongoose = require("passport-local-mongoose");

const localUserSchema = new mongoose.Schema({
    username: String,
    password: String
});

localUserSchema.plugin(passportLocalMongoose);

module.exports = mongoose.model("LocalUser", localUserSchema);

Я искал в Интернете, но я не могу найти решение. Почему это не работает?

0 ответов

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