Экспресс проверка подлинности всегда возвращает ложь - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть страница, которую могут посещать только авторизованные пользователи, однако проверка подлинности в моем коде всегда возвращает false (перенаправляет на / clipboard, который является страницей входа в систему)

Я пытался реализовать различные модуликак и модуль session, и я установил правильный порядок в файлах express и passport.js, я чувствую, что он должен работать, но по какой-то причине я не могу заставить аутентификацию возвращать true

const router = express.Router();
router.get("/", (_: express.Request, res: express.Response) => {
    res.render("index", {
        title: "Daniell | Home"
    });
});
router.get("/clipboard", (req: express.Request, res: express.Response) => {
    res.render("clipboard/index", {
        title: "Login"
    });
});
router.get("/clipboard/:username", (req: express.Request, res: express.Response) => {
    if (req.isAuthenticated()) {
        return res.send(`Welcome ${req.query.username}`);
    }
    res.redirect("/clipboard");
});
// views setup
this.express.set("view engine", "ejs");
this.express.set("views", path.join(__dirname, "../views"));

// static files
this.express.use(express.static(path.join(__dirname, "./public")));
this.express.use(express.static(path.join(__dirname, "../node_modules/bootstrap/dist")));

this.express.use("/", router);

this.express.use(bodyParser.urlencoded({ extended: true }));
this.express.use(cookieParser());

// passport
const MongoStore = connectMongo(session);

this.express.use(session({
    secret: "panda warrior",
    resave: true,
    saveUninitialized: true,
    store: new MongoStore({ mongooseConnection: mongoose.connection })
}));
this.express.use(passport.initialize());
this.express.use(passport.session());

passport.serializeUser((user: { id: string }, done) => {
    done(undefined, user.id);
});

passport.deserializeUser((id: string, done) => {
    User.findById(id, (error: Error, user: string) => {
        done(error, user);
    });
});

// mongoose
mongoose.connect(process.env.MONGO_PATH, { useNewUrlParser: true });
interface IUser extends mongoose.Document {
    username: string;
    password: string;
}

const UserSchema = new mongoose.Schema({
    username: { type: String, required: true },
    password: { type: String, required: true }
});
const User = mongoose.model<IUser>("User", UserSchema);

// authentication
passport.use(new Strategy(
    (username: string, password: string, done) => {
        User.findOne({ username: username }, (error, user) => {
            if (error) {
                return done(error);
            }
            if (!user) {
                return done(undefined, false);
            }
            if (user.password != password) {
                return done(undefined, false);
            }

            return done(undefined, user);
        });
    })
);

this.express.post("/clipboard",
    passport.authenticate("local", { failureRedirect: "/clipboard" }),
    (req: express.Request, res: express.Response) => {
        res.redirect(`/clipboard/user?username=${req.user.username}`);
    });

ИспользованиеПриведенный выше код переходит на localhost:3000/clipboard и я ввожу действительные учетные данные, но я перенаправляюсь на ту же страницу, а не на страницу с сообщением об успехе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...