Пароль администратора (Войдите в систему с одним паролем к webiste) - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть procjet, который позволит только администратору размещать и входить в систему без имени пользователя или регистрации. Так что я просто использовал пароль. Но там, где я собираюсь, проблема, которую я и некоторые из моих друзей, связанных с этими кодировками, не могли решить. На эту страницу я ссылался на код, и проблема та же: NodeJS -Паспорт JS Предоставление определенного пароля

Я использовал паспорт. js, nodejs и express. js с шаблоном мопса.

Это мой пользователь. js модель:

 const mongoose = require('mongoose');
const UserSchema = mongoose.Schema({
    password:{
        type: String,
        required: true
      }
});
const User = module.exports = mongoose.model('User', UserSchema);

Это мой паспорт. js

const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/user');
const config = require('../config/database');
const bcrypt = require('bcryptjs');

module.exports = function(passport){
  // Local Strategy
  passport.use(new LocalStrategy(function(password){

    let query = {password:password};
    User.findOne(query, function(err, user){
      if(err) throw err;
      if(!user){
        return done(null, false, {message: 'No user found'});
      }

      // Match Password
      bcrypt.compare(password, user.password, function(err, isMatch){
        if(err) throw err;
        if(isMatch){
          return done(null, user);
        } else {
          return done(null, false, {message: 'Wrong password'});
        }
      });
    });
  }));

  passport.serializeUser(function(user, done) {
    done(null, user.id);
  });

  passport.deserializeUser(function(id, done) {
    User.findById(id, function(err, user) {
      done(err, user);
    });

  });
}

Это мои пользователи. js

const express = require("express");
const router = express.Router();
const bcrypt = require('bcryptjs');
const passport = require('passport');

let User = require('../models/user');

// Register Form
router.get('/login', function(req, res){
    const password = req.body.password;
    req.checkBody('password', 'Password is required').notEmpty();

    let errors = req.validationErrors();

    res.render('login');
  });

  router.post('/login', function(req, res, next){
    passport.authenticate('local', {
      successRedirect:'/',
      failureRedirect:'/users/login',
      failureFlash: true
    })(req, res, next);
  });

  // logout
  router.get('/logout', function(req, res){
    req.logout();
    req.flash('success', 'You are logged out');
    res.redirect('/login');
  });

  module.exports = router; 

Также в db я создал коллекцию под названием user ", потому что когда я пытался сделать это с помощью своего кода, я узнал пользователя Может быть, проблема может быть в пользователе. js (Модели) или паспорт. js это моя коммандная строка mongodb:

db.createCollection('users');
...
db.users.insert{(password:'123'});
...

Мне нужна ваша помощь, пожалуйста, это моя школьная домашняя работа, и я Я обещал выполнить это обещание. Пожалуйста, помогите мне. Как можно решить эту проблему?

1 Ответ

0 голосов
/ 18 февраля 2020

по умолчанию для паспорта. js LocalStrategy получает такую ​​функцию:

    function(username, password, done){//...}

Или, если вы установите {passReqToCallback: true}:

    function(req, username, password, done){//...}

Итак, если вы передадите только один аргумент это будет имя пользователя.

Я думаю, что вы можете решить это так:

    function(username, password, done){
         // Here's your code where you can not use 'username' and everything will be fine
    }
...