Hapi 框架中如何设置路由权限验证

Hapi 是一个 Node.js 的 Web 框架,它提供了一些强大的功能,如路由、插件、模板引擎、请求处理等。在实际开发中,我们经常需要对路由进行权限验证,以确保用户只能访问他们有权限访问的资源。在本文中,我们将介绍如何在 Hapi 框架中设置路由权限验证。

1. 安装 Hapi

如果你还没有安装 Hapi,可以通过以下命令进行安装:

2. 创建路由

首先,我们需要创建一个简单的路由:

const Hapi = require('hapi');
const server = Hapi.server({
  port: 3000,
  host: 'localhost'
});

server.route({
  method: 'GET',
  path: '/hello',
  handler: (request, h) => {
    return 'Hello World!';
  }
});

async function start() {
  await server.start();
  console.log(`Server running at: ${server.info.uri}`);
}

start();

在上面的代码中,我们创建了一个 Hapi 服务器,监听 3000 端口,然后创建了一个简单的路由,当用户访问 /hello 路径时,返回一个字符串 "Hello World!"。

3. 设置路由权限验证

现在,我们需要对这个路由进行权限验证。在 Hapi 框架中,我们可以使用它提供的插件 hapi-auth-basic 来实现简单的基本身份验证。首先,我们需要安装这个插件:

然后,在创建服务器时,我们需要注册这个插件:

const Hapi = require('hapi');
const Basic = require('hapi-auth-basic');
const server = Hapi.server({
  port: 3000,
  host: 'localhost'
});

const users = {
  john: {
    username: 'john',
    password: 'password',
    name: 'John Doe',
    id: '2133d32a'
  }
};

const validate = async (request, username, password, h) => {
  const user = users[username];
  if (!user) {
    return { isValid: false };
  }

  const isValid = password === user.password;
  return { isValid, credentials: { id: user.id, name: user.name } };
};

server.register(Basic);

server.auth.strategy('simple', 'basic', { validate });

server.route({
  method: 'GET',
  path: '/hello',
  handler: (request, h) => {
    return 'Hello World!';
  },
  options: {
    auth: 'simple'
  }
});

async function start() {
  await server.start();
  console.log(`Server running at: ${server.info.uri}`);
}

start();

在上面的代码中,我们定义了一个 users 对象,其中包含了一个用户 john 的用户名、密码、姓名和 ID。然后,我们定义了一个 validate 函数,用于验证用户的用户名和密码是否正确。如果验证成功,我们返回一个包含用户 ID 和姓名的 credentials 对象,以便在后续的请求中使用。

接下来,我们注册了 hapi-auth-basic 插件,并使用 server.auth.strategy 方法创建了一个名为 simple 的认证策略。在路由中,我们使用 options.auth 属性指定了这个路由需要进行身份验证。

4. 测试路由权限验证

现在,我们可以使用 Postman 或浏览器来测试这个路由了。当我们访问 /hello 路径时,我们将被要求输入用户名和密码。如果我们输入了正确的用户名和密码,我们将获得 "Hello World!" 的响应。否则,我们将获得一个 401 Unauthorized 的响应。

5. 总结

在本文中,我们介绍了如何在 Hapi 框架中设置路由权限验证。我们使用 hapi-auth-basic 插件实现了简单的基本身份验证,并创建了一个 validate 函数来验证用户的用户名和密码。最后,我们在路由中使用 options.auth 属性来指定这个路由需要进行身份验证。希望这篇文章可以帮助你更好地理解 Hapi 框架中的路由权限验证。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65bdb7d2add4f0e0ff75e5e0