В настоящее время я работаю над веб-приложением на базе Node и Express (JS) и MongoDB для моего проекта в последний год. Я учусь и в то же время пытаюсь реализовать различные функции. У меня длинная кривая обучения. Буду признателен, если принять это во внимание.
Я пытался создать Профили пользователей только для всех зарегистрированных пользователей.
То, что я пытаюсь сделать достижения:
1) Когда кто-то использует параметры маршрутизации, такие как:
app.get("/users/:username", function(req,res) {
//Code
});
Я хочу, чтобы запрос был успешным, только если аутентифицирован пользователь - Паспорт JS (локальная стратегия).
2) Если они только пытаются попасть по пути / user - тогда он должен показываться неавторизованным.
3) Когда они входят в систему, она должна показать им страницу по пути - / users / {username} / map
Примечание. Карта - это просто другой файл .e js.
PS Я пробовал различные методы, но здесь невозможно перечислить их все, ниже приведен мой текущий код:
//jshint esversion:6
require('dotenv').config()
const express = require("express");
const bodyParser = require("body-parser");
const ejs = require("ejs");
const app = express();
const mongoose = require("mongoose");
const encrypt = require("mongoose-encryption");
//For Sessions and Cookies
const session = require("express-session");
const passport = require("passport");
const passportLocalMongoose = require("passport-local-mongoose");
app.use(express.static("public"));
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({
extended:true
}));
//Initializing Sessions
app.use(session({
secret: "Hrishikesh",
resave: false,
saveUninitialized: false
}));
//Initializing Passport
app.use(passport.initialize());
//Using Passport to deal with sessions
app.use(passport.session());
mongoose.connect("mongodb://localhost:27017/dunzoUserDB" , { useUnifiedTopology: true , useNewUrlParser: true });
mongoose.set("useCreateIndex", true);
//Schema for Users
const userSchema = new mongoose.Schema({
email: String,
password: String,
username: String
});
//Passport-local-mongoose ----> To be modified in Schema
userSchema.plugin(passportLocalMongoose); //Used to hash & salt password and also to save our Users into our MongoDB
//Model
const User = mongoose.model("User", userSchema);
//Functions of Passport Local Mongoose to serialize and De-serialize cookies and information within them.
passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.get("/", function(req,res) {
res.render("index");
});
app.get("/login", function(req,res) {
res.render("login");
});
app.get("/register", function(req,res) {
res.render("register");
});
app.get("/map", function(req, res) {
if(req.isAuthenticated()) {
res.render("map");
} else {
res.redirect("/login");
}
});
app.post("/register", function(req, res) {
//We will be using Passport-local-mongoose for all registration and authentication as a middleman for us
User.register({username: req.body.username}, req.body.password, function(err, user) {
if (err) {
console.log(err);
res.redirect("/register")
} else {
//If registered successfully, perform LOCAL Authentication - Nothing to UNDERSTAND here
passport.authenticate("local")(req, res, function(){
res.redirect("/login");
});
}
})
});
app.post("/login", function(req,res) {
const user = new User({
username: req.body.username,
password: req.body.password
});
//Login method from Passport
req.login(user, function(err) {
if (err) {
console.log(err);
res.redirect("login");
} else {
passport.authenticate("local",) (req, res, function(){
res.redirect("/map");
});
}
})
});
app.get('/logout',
function(req, res){
req.logout();
res.redirect('/');
});
app.listen(3000, function(){
console.log("Server started on Port 3000");
});