Проблема аутентификации с мокко, чай и супертест - PullRequest
2 голосов
/ 08 июля 2019

Я добавляю userRecord в базу данных в функции before, но когда я пытаюсь аутентифицироваться с помощью supertest, это дает мне плохую комбинацию.Я использую паруса для бэкэнда, код выглядит следующим образом:

var request = require('supertest');
let should = chai.should();

require('../../boostrap.test.js');

describe('The bookedservices Controller', function() {
  let userRecord,
    studioRecord,
    serviceRecord,
    timingRecord,
    bookedServiceRecord,
    authenticatedUser,
    authenticatedStudio,
    session = null;

  before(async function() {
    // beforeEach(async function(done) {
    userRecord = await User.create({
      emailAddress: 'xx@gmail.com',
      password: 'xxisnotgood123',
      fullName: 'siddhant',
      location: 'vellore',
      image: 'not a pipi pic',
      mobile: '9681901311',
      description: 'words cant describe me'
    }).fetch();

    creditRecord = await Credits.create({
      expirydate: '2019-05-25T03:23:55.016Z',
      creditsPresent: 30,
      passType: '1 month',
      userId: userRecord.id
    }).fetch();

    studioRecord = await Studios.create({
      emailAddress: 'yy@gmail.com',
      password: 'yyisnotgood123',
      fullName: 'siddhant',
      location: 'vellore',
      image: 'not a lili pic',
      mobile: '9681901311',
      description: 'words cant describe me'
    }).fetch();

    serviceRecord = await Services.create({
      serviceName: 'zumba',
      price: 1500,
      creditCost: 3,
      studioId: studioRecord.id
    }).fetch();

    timingRecord = await Timings.create({
      eventInTime: '2019-05-11T03:23:55.016Z',
      eventOutTime: '2019-05-13T00:00:02.001Z',
      numberOfSlotsAvailable: 3,
      serviceId: serviceRecord.id
    }).fetch();

    bookedServiceRecord = await BookedServices.create({
      isComplete: 'false',
      bookingDate: '2019-05-13T03:23:55.016Z',
      timingId: timingRecord.id,
      userId: userRecord.id,
      studioId: studioRecord.id,
      serviceId: serviceRecord.id
    }).fetch();

    authenticatedUser = await request.agent(sails.hooks.http.app);
    authenticatedUser
      .post('/api/v1/users/entrance/login')
      .set('Accept', 'application/json')
      .send({ emailAddress: 'xx@gmail.com', password: 'xxisnotgood123' })
      .end((err, res) => {
        if (err) {
          throw err;
        } else {
          console.log(res);
          session = res.header['Sails.sid'];
        }
      });

    // authenticatedStudio = await request.agent(sails.hooks.http.app);
    // authenticatedStudio
    //   .post('/api/v1/studios/login')
    //   .set('Accept', 'application/json')
    //   .send({ emailAddress: 'yy@gmail.com', password: 'yyisnotgood123' });

    // done();
  });

  it('all the records have been added', function(done) {
    userRecord.should.have.property('id');
    console.log('OUTPUT: userRecord', userRecord);
    studioRecord.should.have.property('id');
    // console.log('OUTPUT: studioRecord', studioRecord);
    serviceRecord.should.have.property('id');
    // console.log('OUTPUT: serviceRecord', serviceRecord);
    timingRecord.should.have.property('id');
    // console.log('OUTPUT: timingRecord', timingRecord);
    bookedServiceRecord.should.have.property('id');
    // console.log('OUTPUT: bookedServiceRecord', bookedServiceRecord);

    done();
  });

  it('should post and return a bookedService model document', function(done) {
    timingRecordId = timingRecord.id;
    // console.log(`/api/v1/timings/${timingRecordId}/bookedservices`);

    authenticatedUser
      .post(`/api/v1/timings/${timingRecordId}/bookedservices`)

      .set('Accept', 'application/json')
      .set('Cookie', session)
      .send({ isComplete: false, bookedDate: '2019-05-13T00:10:02.001Z' })
      .expect(200)
      .expect('Content-Type', /json/)
      .end(function(err, result) {
        if (err) {
          done(err);
        } else {
          result.body.should.be.an('object');
          result.body.should.have.property('bookedServiceDoc');
          result.body.should.have.property('message');
          createdPostId = result.body.bookedServiceDoc.should.have.property(
            'id'
          );
          console.log(result.body);
          done();
        }
      });
  });

Ошибка такая:

<- POST / api / v1 / users / entry / login (36ms 401)|плохой комбо |Предоставленная комбинация электронной почты и пароля не соответствует ни одному пользователю в базе данных. </p>

Edit-1: - Я сузил его до того, что пользователь не существует, но выдает эту ошибку из-за отсутствия обработкипароль, я использую шаблон, который поставляется с аутентификацией пользователя, и он использует helpers.password для подтверждения пароля.Там выдает ошибку.

Но где этот помощник в проекте?

Спасибо за помощь

Ответы [ 2 ]

2 голосов
/ 22 июля 2019

Ваша проблема на самом деле довольно проста, но ее можно легко упустить, вы добавляете пользователя напрямую с не хэшированным паролем, в то время как sails хэширует пароль, а затем сохраняет его в базе данных. Ваше решение состоит в том, чтобы просто хешировать пароль перед тем, как сделать запись пользователя и сохранить ее в базе данных

1 голос
/ 22 июля 2019

Для любого в будущем, вот как я это изменил

let hashedPasswordUser = await sails.helpers.passwords.hashPassword(
      'xxisnotgood123',
      12
    );


    userRecord = await User.create({
      emailAddress: 'xx@gmail.com',
      password: hashedPasswordUser,
      fullName: 'siddhant',
      location: 'vellore',
      image: 'not a cipdsai pic',
      mobile: '9681901311',
      description: 'words cant describe me'
    }).fetch();
...