Hapi.js аутентификация пользователя с проблемой mongodb - PullRequest
0 голосов
/ 11 марта 2019

Для проверки пользователя теперь я прописал имя пользователя и пароль непосредственно в своем коде.Но я хочу это динамически, используя имя пользователя базы данных и пароль.Поскольку я новичок в hapi.js, мне кажется, это довольно сложно.Это мой код:

app.js

const auth = require('hapi-auth-basic');
const hapi = require('hapi'); 

mongoose.connect('mongodb://localhost:27017/db', { 
 useNewUrlParser: true }, (err) => {
   if (!err) { console.log('Succeeded.') }
   else { console.log(`Error`)}
 });

const StudentModel = mongoose.model('Student', {
  username: String,
  password: String
});

const user = {
   name: 'jon',
   password: '123'
};
 const validate = async (request, username, password, h) => {

let isValid = username === user.name && password === user.password;
    return { 
        isValid: isValid, 
        credentials: {
            name: user.name
          } 
       };
   };

 const init = async () => {

     await server.register(auth);
     server.auth.strategy('simple', 'basic', {validate});
     server.auth.default('simple');

   server.route({
      method: 'GET',
      path: '/',
      handler: async (request, h) => {
           return 'welcome';
      }
 });
 }

Я попытался сделать это, изменив validate , как показано ниже:

const validate = async (request, username, password, h) => {

let isValid = username === request.payload.name && password === request.payload.password;
    return { 
        isValid: isValid, 
        credentials: {
            name: request.payload.name
        } 
    };
 };

но я получил ошибку типа "имя", как это естественно.Как я могу изменить это?

1 Ответ

0 голосов
/ 11 марта 2019

Здесь выберите пользователя и проверьте метод проверки

const validate = async (request, username, password, h) => {    
    // fetch user here 
    const user = await StudentModel.findOne({username, password}).exec();    
    // user doesn't exist
    if(!user) return {isValid: false}

    // just make sure here user really exists
    return {
        isValid: true,
        credentials: {
                name: user.name
        }
    }    
}
...