hapi-auth-cookie保护所有路由,包括静态

时间:2016-03-06 12:13:41

标签: hapijs

如果不对任何路由应用策略,hapi-auth-cookie将保护所有路由,包括静态路由。

server.register(require('hapi-auth-cookie'), function (err) {

    if (err) {
      logError(err);
    }

    server.auth.strategy('session', 'cookie', true, {
        password: 'things really long',
        clearInvalid: true,
        isSecure: false,
        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);
            });
        }
    });
});

以下是我的路线:

{
  method: 'POST',
  path: '/api/1/doSomething',
  config: {
    validate: {
      payload: someJoyObject
    },
    handler: function(request, reply) {
    stuff
    }
  }
}

{
    method: 'GET',
    path: '/{param*}',
    handler: {
        directory: {
            path: './public',
            listing: false,
            index: true
        }
    }
}

我无法加载我的应用的任何文件:

{"statusCode":401,"error":"Unauthorized","message":"Missing authentication"}

1 个答案:

答案 0 :(得分:4)

查看documentation for server.auth.strategy()。您传递true作为第3个参数意味着hapi会默认将此策略应用于所有路由。

要为您的静态路线禁用它:

  1. 不要将其设置为所有路线的必需策略
  2. 在目录处理程序路由上显式禁用策略:
  3. e.g:

    {
        method: 'GET',
        path: '/{param*}',
        config: {
            auth: false
        },
        handler: {
            directory: {
                path: './public',
                listing: false,
                index: true
            }
        }
    }