Как сделать список дел в NodeJ доступным для пользователя, который только его опубликовал? - PullRequest
0 голосов
/ 03 апреля 2019

Попытка обернуть голову вокруг следующей проблемы в течение пары дней. У меня есть веб-приложение, которое принимает логин, после чего пользователь может создать список студентов. Я пытаюсь сделать список видимым для пользователя, который разместил его ТОЛЬКО. Ниже моя работа до сих пор.

students.controller.js

 const express = require('express');
    var router = express.Router();
    var bodyParser = require('body-parser')
   const mongoose = require('mongoose');
   const passport = require('passport');

   const Student = require('../models/student');
   const passportConfig = require('../config/passport');

   const app = express();


   router.get('/',passportConfig.isAuthenticated,(req, res) => {
    res.render('students');

   });

    router.post('/',(req, res) => {
    InsertRecord(req, res);

     });

     function InsertRecord(req, res){
    var student = new Student();
    student.fullName = req.body.fullname;
    student.phone = req.body.phone;
    student.save((err, doc) => {
        if (!err)
            res.redirect('students/list');
        else {
            console.log(' Error during insertion: '+ err);
        }
    });

}

router.get('/list',passportConfig.isAuthenticated, (req, res) => {
    Student.find((err, docs) => {
        if (!err) {
            res.render('list', {
                list:docs

            });
        }
        else {
            console.log('Error in retrieving students: '+ err);
        }
    });
});



module.exports = router;

Модель схемы Student.js

const mongoose = require('mongoose');
var ObjectId = mongoose.Schema.Types.ObjectId;


const studentSchema = new mongoose.Schema({
    fullName: {
        type: String
    },
    phone: {
        type: Number
    },
    author: {
      id: {
          type: mongoose.Schema.Types.ObjectId,
          ref: "User"
    },
   }

});

const Student = mongoose.model('Student', studentSchema);

module.exports = Student;


User.js Schema

const bcrypt = require('bcrypt');
const crypto = require('crypto');
const mongoose = require('mongoose');
const Student = require('../models/student');


const userSchema = new mongoose.Schema({
  email: { type: String, unique: true },
  password: String,
  passwordResetToken: String,
  passwordResetExpires: Date,
  author: { 
    id: {
      type: mongoose.Schema.Types.ObjectId,
      ref: "User"
    }
  },

  snapchat: String,
  facebook: String,
  twitter: String,
  google: String,
  github: String,
  instagram: String,
  linkedin: String,
  steam: String,
  tokens: Array,

  profile: {
    name: String,
    gender: String,
    location: String,
    website: String,
    picture: String
  }
}, { timestamps: true });

/**
 * Password hash middleware.
 */
userSchema.pre('save', function save(next) {
  const user = this;
  if (!user.isModified('password')) { return next(); }
  bcrypt.genSalt(10, (err, salt) => {
    if (err) { return next(err); }
    bcrypt.hash(user.password, salt, (err, hash) => {
      if (err) { return next(err); }
      user.password = hash;
      next();
    });
  });
});

/**
 * Helper method for validating user's password.
 */
userSchema.methods.comparePassword = function comparePassword(candidatePassword, cb) {
  bcrypt.compare(candidatePassword, this.password, (err, isMatch) => {
    cb(err, isMatch);
  });
};

/**
 * Helper method for getting user's gravatar.
 */
userSchema.methods.gravatar = function gravatar(size) {
  if (!size) {
    size = 200;
  }
  if (!this.email) {
    return `https://gravatar.com/avatar/?s=${size}&d=retro`;
  }
  const md5 = crypto.createHash('md5').update(this.email).digest('hex');
  return `https://gravatar.com/avatar/${md5}?s=${size}&d=retro`;
};

const User = mongoose.model('User', userSchema);


module.exports = User;

Пожалуйста, дайте мне знать, если что-то еще нужно.

1 Ответ

0 голосов
/ 03 апреля 2019

Как насчет использования JWT ?

JWT - это способ авторизации на основе токена. Вы можете хранить электронную почту пользователя или _id в jwt. Когда пользователь вошел в систему, сервер предоставляет JWT, который хранит электронную почту пользователя. Когда пользователь запросил список с помощью jwt, вы можете найти ученика с _id пользователя в jwt, например student.findById({author: token.id}).

Вам не нужно создавать модуль jwt, но вы можете использовать jsonwebtoken , который уже предоставлен.

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