如何将 hapi auth 插件变成可选插件

how to turn a hapi auth plugin to be optional

我想使用 hapi jwt token auth 插件 https://github.com/ryanfitz/hapi-auth-jwt 但要创建一个带有可选身份验证的路由。我怎样才能防止路由返回 401,而是继续执行 null request.auth.credentials。

我希望使用它的所有其他路由保持相同的实现,即在未经过身份验证的请求上返回 401。

server.register(require('hapi-auth-jwt'), function (error) {

    server.auth.strategy('token', 'jwt', {
        key: privateKey,
        validateFunc: validate
    });

    //make this one allow anonymous while also reading logged in credentials
    server.route({
        method: 'GET',
        path: '/',
        config: {
            auth: 'token'
        }
    });

    server.route({
        method: 'GET',
        path: '/mystuff',
        config: {
            auth: 'token'
        }
    });
});


server.start();

您可以在路由配置中将其设置为可选:

server.route({
    method: 'GET',
    path: '/',
    config: {
        auth: {
            strategy: 'token',
            mode: 'optional'
        }    
    }
});

模式可以是 truefalserequiredoptionaltry。有关详细信息,请参阅 authentication tutorial

除了optional路由的auth配置,你还可以使用try.

server.route({
  method: 'GET',
  path: '/',
  config: {
    auth: {
      strategy: 'token',
      mode: 'try'
    }    
  }
})

两者的区别

  • optional:不需要身份验证凭据,但如果提供则需要有效
  • try:如果用户提供无效的身份验证凭据,他们仍然会被接受,用户将继续使用路由处理程序