2017-05-15 7 views
1

HapiJS 및 Hapi-auth-cookie 전략을 사용하여 앱에 대해 작은 REST 백엔드를 작성 중이지만 제대로 작동하지 않습니다. 나는이 같은 경로를 정의했습니다 :Hapi-auth-cookie는 쿠키를 설정하지만 validationFunc 호출을 실행하지 않고 무단으로 throw하지 않습니다.

/를 - 프런트 엔드를 응용 프로그램의 일부를 봉사

/로그인가 - 쿠키를

을 설정하려고 마지막으로 다음 사용자에 대한 확인 암호를 비교하고 MongoDB를 수행

/레스토랑 - 내가 정식으로 확보하기 위해 노력 : '세션'하지만

내가 정의한 전략을 작동 할 수 없습니다가 (거의 게요! - 인증 - 쿠키 GitHub의 파에서 과거를 복사 ge),하지만 주목하지만 console.log를 사용하여 validateFunc가 전달 된 전략 옵션은 한번도 호출되지 않습니다. 왜? 그것은 내 주요 문제인가 아니면 내 다른 부분의 코드가 고장 났는가?

일부 코드 샘플 :

세션 인증 전략 정의 : 전략에 의해 보호

login: (request, reply) => { 
    const dbQuery = { 
     email: request.payload.email 
    }; 

    UserSchema.findOne(dbQuery, (err, user) => { 
     if (err) { 
      return console.log(err); 
     } 
     if (!user) { 
      return reply(Boom.unauthorized()); 
     } 

     Bcrypt.compare(request.payload.password, user.password, (err, res) => { 
      if (err) { 
       return console.log(err); 
      } 
      if (!res) { 
       return reply(Boom.unauthorized()); 
      } 

      const sid = String(123); 
      request.server.app.cache.set(sid, { account: user }, 0, (err) => { 

       if (err) { 
        reply(err); 
       } 

       request.cookieAuth.set({ sid: sid }); 
       return reply("ok"); 
      }); 
     }) 
    }); 
} 

경로 정의 : 설정 쿠키에 대한 책임

exports.register = function(server, options, next) { 
    const cache = server.cache({ segment: 'sessions', expiresIn: 3 * 24 * 60 * 60 * 1000 }); 
    server.app.cache = cache; 

    server.auth.strategy('session', 'cookie', false, { 
     password: 'password-should-be-32-characters', 
     cookie: 'lun-cookie', 
     redirectTo: false, 
     isSecure: false, 
     ttl: 20 * 1000, 
     validateFunc: function (request, session, callback) { 
      cache.get(session.sid, (err, cached) => { 

       if (err) { 
        return callback(err, false); 
       } 

       if (!cached) { 
        return callback(null, false); 
       } 

       return callback(null, true, cached.account); 
      }); 
     } 
    }); 

    return next(); 
}; 

로그인 방법

{ 
    method: 'GET', 
    path: '/restaurants', 
    handler: controller.getRestaurants, 
    config: { 
     validate: { 
      query: { 
       list: Joi.string().allow('full').optional(), 
       type: Joi.string().valid(restaurantTypeEnum).optional(), 
      } 
     }, 
     auth: 'session', 
    } 
} 

아이디어가 있으십니까? 나는 그것을 이해하려고 벌써 2 일을 보냈다. 우선

답변

0

, 게요! - 인증 - 쿠키 그때 내가 그 로그인 기능 실제로 전달을 확인 할 경로

전에 등록

그때 내가 '/ 레스토랑'를 편집하는 몇 가지 쿠키를 응답되어 있는지 확인 auth: { mode: 'try', strategy: 'session' },

으로 라우팅하고 request.headers에 쿠키가 포함되어 있는지 확인하십시오.

작동 시키려면 단위 테스트를 작성해야합니다.