2017-05-15 3 views
1

私はHapiJSおよびHapi-auth-cookie戦略を使用してアプリケーション用の小さなRESTバックエンドを構築していますが、アプリケーションHapi-auth-cookieはクッキーを設定しますが、validationFuncコールを作成せずにUnauthorizedをスローします

/ログインのフロントエンド部分を提供するために - -

/パスワードを比較し、その後、ユーザーに確認のMongoDB、最後にクッキー

を設定しようとして実行します。私はこのようなルートを定義しました

/レストラン - 私はAUTHで固定してみました:「セッション」が、それは

を動作させることができない私は戦略を定義したが(ほとんどHAPI-AUTH-クッキーgithubのPAから過去をコピーします私は気付いたが、console.logを使って、戦略オプションで渡されたvalidateFuncは一度も呼び出されていない。どうして?それは私の主な問題ですか、それとも私のコードの他の部分が壊れていますか?

いくつかのコードサンプル:

セッション認証戦略の定義:Cookieを設定する責任

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(); 
}; 

ログイン方法:戦略で固定

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"); 
      }); 
     }) 
    }); 
} 

ルート定義:

{ 
    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

まず、HAPI-AUTH-クッキーがルート

前に登録されていることを、私はそのログイン機能をチェックします実際に、私は「/レストラン」を編集しますいくつかのクッキー

を通過して、返信してください auth: { mode: 'try', strategy: 'session' },

にルーティングし、request.headersにCookieが含まれているかどうかを確認してください。

もしあなたがそれを稼働させたら、それにいくつかの単体テストを書くようにしてください。

関連する問題