标签: hapijs

request.auth.session.set(user_info)不工作HapiJS

这是我的策略,它在server.register()上定义.我将我的工作基于一个教程,它实际上是从它复制但它不起作用.

    server.auth.strategy('standard', 'cookie', {
        password: 'somecrazycookiesecretthatcantbeguesseswouldgohere', // cookie secret
        cookie: 'app-cookie', // Cookie name
        isSecure: false, // required for non-https applications
        redirectTo: '/login',
        ttl: 24 * 60 * 60 * 1000 // Set session to 1 day
    });

    server.auth.default({
        strategy: 'standard',
        mode: 'required',
        scope: ['admin']
    });
Run Code Online (Sandbox Code Playgroud)

这是我发生错误的登录路由:

server.route({
    method: 'POST',
    path: '/login',
    config: {
        auth: false,
        validate: {
            payload: {
                email: Joi.string().email().required(),
                password: Joi.string().min(2).max(200).required()
            }
        },
        handler: function (request, reply) {

            getValidatedUser(request.payload.email, request.payload.password)
                    .then(function (user) {

                        if (user) {
                            //ERROR …
Run Code Online (Sandbox Code Playgroud)

javascript node.js hapijs

1
推荐指数
1
解决办法
1111
查看次数

Node.js的Heroku H12超时错误

目前,我正在使用Node hapijs框架开发REST API .API部署在Heroku上.

API中有一个GET端点,它发出get请求以从第三方检索数据并在发送回复之前处理数据.此特定端点不时超时.当端点超时时,Heroku返回H12错误.一旦超时,对该端点的后续请求将导致H12错误.我必须重新启动Heroku上的应用程序才能使该端点再次运行.API中的任何其他端点都不会受到此错误的任何影响,即使发生错误,也可以继续正常工作.

在我的调试过程中并查看日志,似乎有时候没有从第三方API返回响应,从而导致错误.

我尝试了以下解决方案来尝试解决问题:

  1. 我正在使用请求库来发出请求.因此,我尝试将超时设置为5000毫秒,作为传递给请求的选项的一部分.它有时工作...触发超时并且端点发送与请求关联的超时错误.这是我想要的行为,因为后续的端点请求工作.但是,有时候不会触发请求超时,但Heroku仍然会返回H12错误(总是在30秒后,默认为Heroku).之后,对该端点的后续请求将返回H12错误(也在30秒后).似乎某些进程在Heroku上"卡住",并且在我重新启动应用程序之前不会终止.

  2. 我已经尝试在hapi.js路由配置对象中添加超时.我得到与上面相同的结果.

  3. 我继续做研究,并怀疑这些问题与这里这里给出的描述有关.似乎在应用程序服务器级别设置一个可以向Heroku工作者发送SIGKILL的超时可能会起作用.在Ruby中看起来相当简单,但我找不到有关如何在Node中执行此操作的更多信息.

非常感谢任何见解.我知道向第三方发出请求时可能会发生超时.这不是问题.问题是端点似乎在超时后被"卡住"在Heroku上并且它变得没有响应.

谢谢您的帮助!

api timeout heroku node.js hapijs

1
推荐指数
1
解决办法
2063
查看次数

如何在Joi / Hapi中设置最大图像尺寸

我正在使用nodejs + mongodb。在上传图片时,如果前端大小超过50kb,则不允许这样做。我想将其设置为最大5MB,以便可以在大小为1MB或2MB的情况下上传图像。我尝试了很多方法,但我仍然没有找到适当的解决方案。我检查了此链接[Joi / hapi] [1]

[1]:https//github.com/hapijs/joi/blob/v9.0.1/API.md,但仍然无法正常工作。有人可以帮我吗

这是我的图式

const nameofSchema = Joi.object().keys({
description: Joi.string(), // .required(),
image: Joi.string().max(500000),

category: Joi.string(),
namesasd: Joi.string().regex(/^[a-z][a-z0-9-]*$/),
title: Joi.string(), // .required(),
price: Joi.number().integer(),
tag: Joi.object().keys({
    tag_name: Joi.string()
})
});
Run Code Online (Sandbox Code Playgroud)

在此图像中,我想将最大限制大小设置为5mb。(上传最大5mb的图像)

以下是路线

create: {
    description: '',
    path: '/',
    verb: 'post'
},
Run Code Online (Sandbox Code Playgroud)

node.js hapijs joi

1
推荐指数
1
解决办法
2083
查看次数

Hapi-Swagger 因标头值而失败

我在我们的应用程序中使用 hapi-swagger,其中一个 API 尝试使用自定义标头,但是当我使用自定义标头调用该 API 时出现以下错误

{
"statusCode": 400,
"error": "Bad Request",
"message": "Invalid request headers input"
}
Run Code Online (Sandbox Code Playgroud)

在我使用带有验证器的标头的 API 下方。

{
        method: 'POST',
        path: '/v1/testapi',
        config: {
            description: 'Greet user',
            notes: ['Use to greet a user'],
            tags: ['api'],    
            handler: function ( request, h ) {
                console.log('sending response...');
                return h.response('OK');
            },
            validate: {
                headers: {
                    name: Joi.string().required()
                }
            }                               
        }
    }
Run Code Online (Sandbox Code Playgroud)

以下是我们正在使用的版本。

"hapi": "17.2.2",

"hapi-swagger": "9.1.1",

"joi": "13.1.2",

node.js swagger-ui hapijs hapi-swagger

1
推荐指数
1
解决办法
1120
查看次数

对每个用户的 Cloudant 一个数据库进行身份验证

我提前道歉 - 这个问题需要一些背景知识,这可能是冗长的:

我正在尝试构建一个可与 PouchDb 脱机工作的应用程序。PouchDb 将与 Cloudant 同步。

使用的技术:Hapi、SQL、Vue、Cloudant、PouchDb

我已经构建了一个小的 hapi.js 服务来注册/验证用户。当“帐户所有者”注册时 - 他们将作为新用户添加到 SQL 数据库中。

使用 Cloudants API,我提供了一个新数据库(使用随机名称),并在数据库上设置了安全性,以便新用户可以访问。

我将安全性(数据库名称、用户名和密码)作为元数据保存回 SQL 数据库中的用户。

与此处非常相似的方法:https : //www.bennadel.com/blog/3208-provisioning-cloudant-couchdb-databases-from-auth0-for-a-database-per-user-architecture-in-angular-2 -4-1.htm(确实,我基于以上内容)。

当“帐户所有者”登录时,查询 SQL 数据库 - 检索元数据并将其发送到客户端 vue 应用程序。然后使用 Cloudant 数据库名称、用户名和密码填充 PouchDB 远程字符串。

例如:

const remoteDB = new PouchDB(`https://${name}:${pass}@0000-0000-bluemix.cloudant.com/${DBname}`);
Run Code Online (Sandbox Code Playgroud)

这一切都有效:PouchDB 可以与 Cloudant 对话 - 并且数据可以毫无问题地进出。

“帐户所有者”能够授予其他人(“员工”)对其 cloudantDB 的读/写访问权限。当他们添加新的职员时,职员会被添加到 SQL 数据库中。使用 cloudants API,我为该用户创建了新的安全凭证,以便他们可以访问 DB-(我不创建新的 DB)并将它们保存到 SQL 数据库中的 Staff Member 作为元数据...

新员工会收到一封电子邮件 - 他们在 SQL db 上设置了他们的用户名和密码,然后可以登录。Cloudant 元数据被拾取......等等...... PouchDB / Couchdb 相互交谈 - 这也作品。

最初我有点担心将这个元/凭据发送给客户端 …

couchdb cloudant hapijs vue.js vuejs2

1
推荐指数
1
解决办法
588
查看次数

续集| 如果任一hasMany关联符合其where条件,则返回结果

我有模型,和Ç

A具有与BC的hasMany关联(并且BC具有回到A的belongs关联)

我想返回A的记录,其中B.b_column ='b'或C.c_column ='c'

我当前的方法是尝试使用required:在哪里的false,但这仅返回A及其关联的所有记录(如果它们存在)。我还尝试在关联上使用split:true,但它似乎仍带回了比我想要的更多的记录。

var results = await A.all({
      include: [
        { 
          model: B, as: "Bs",
          where: { b_column: "b"},
          separate: true
        },
        { 
          model: C, as: "Cs",
          where: {c_column: "c"},
          separate: true
        },
      ]
    });
Run Code Online (Sandbox Code Playgroud)

postgresql node.js sequelize.js hapijs

1
推荐指数
1
解决办法
294
查看次数

不允许验证 - hapi js

我听了很多关于 hapi api 框架的信息,所以我从它开始。虽然文档非常可靠,但我仍然无法解决我的问题:

我正在尝试发送一些表单数据并希望在实际处理之前对其进行验证,因此我使用 hapi 强大的验证实用程序并收到以下错误:

?[31m
[1] validation is not allowed?[0m
    at Object.exports.assert (E:\repository\simpleHapiApp\node_modules\hapi\node
_modules\hoek\lib\index.js:425:11)
    at Object.exports.assert (E:\repository\simpleHapiApp\node_modules\hapi\lib\
schema.js:15:10)
    at new module.exports.internals.Route (E:\repository\simpleHapiApp\node_modu
les\hapi\lib\route.js:46:12)
    at E:\repository\simpleHapiApp\node_modules\hapi\lib\router.js:110:25
    at Array.forEach (native)
    at E:\repository\simpleHapiApp\node_modules\hapi\lib\router.js:107:17
    at Array.forEach (native)
    at internals.Router.add (E:\repository\simpleHapiApp\node_modules\hapi\lib\r
outer.js:104:13)
    at internals.Server._route (E:\repository\simpleHapiApp\node_modules\hapi\li
b\server.js:471:18)
    at internals.Server.route (E:\repository\simpleHapiApp\node_modules\hapi\lib
\server.js:465:10)
Run Code Online (Sandbox Code Playgroud)

我的代码如下所示:

server.route({
    method: 'POST',
    path: '/apis/login',
    handler: empApi.login,
    config:{
        validation:{
            payload: {
                username: joi.string().min(3).max(20).required(),
                password: joi.string().alphanum().required()
            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

请指出错误在哪里。

validation node.js hapijs

0
推荐指数
1
解决办法
1901
查看次数

一个路由,两个有效的有效负载在Hapi.js与Joi

我正在尝试在同一路由上验证两个不同的有效负载模式.两个有效选项是:

validate: {
  payload: {
    email: Joi.string().required(),
    password: Joi.string().required()
  }
}
Run Code Online (Sandbox Code Playgroud)

validate: {
  payload: {
    token: Joi.string().required()
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用andor函数的组合非常接近,但它允许所有三个作为有效负载传递:

validate: {
  payload: Joi.object().keys({
    email: Joi.string().required(),
    password: Joi.string().required(),
    token: Joi.string().required()
  }).and('email', 'password').or('token', 'email', 'password')
}
Run Code Online (Sandbox Code Playgroud)

javascript node.js hapijs joi

0
推荐指数
1
解决办法
1132
查看次数

Hapi-Joi验证有效载荷,它可以是一个对象数组,也可以只是简单的Javascript对象?

我有一个post调用,可以将有效负载作为单个JS对象以及对象数组将其保存到db.如何编写模式以验证此类有效负载?

JS对象

{
  label: 'label',
  key: 'key',
  help_text: 'text'
}
Run Code Online (Sandbox Code Playgroud)

要么

[
{
  label: 'label1',
  key: 'key1',
  help_text:'text1'
 },
 {
  label: 'label2',
  key: 'key2',
  help_text:'text2'
 }
 ]
Run Code Online (Sandbox Code Playgroud)

javascript node.js hapijs joi

0
推荐指数
1
解决办法
864
查看次数

如何验证 CSRF 令牌?

我正在尝试使用 Hapi 的插件Crumb来实施针对 CSRF 攻击的解决方案,但似乎我没有得到解决方案的流程。我可以简单地在每个 http 响应中设置一个令牌作为 cookie。问题来了,如果客户端发出令牌,REST 如何验证 CSRF 令牌?REST 后端如何理解此随机字符串对该请求有效而另一个随机字符串无效?

csrf token hapijs

0
推荐指数
1
解决办法
5184
查看次数

await仅在异步函数中有效 - 使用mongoosejs时exec()

我正在将一个Hapi项目移植到v17,并在迁移到异步/等待时遇到Mongoose的一些问题.

使用'await'的任何代码,在模型(mongoose)上,对象例如:

const result = await User.findOne({email: email}).exec();
Run Code Online (Sandbox Code Playgroud)

运行'node server.js'时出现以下异常

            await User.findOne({}).exec();
        ^^^^^

SyntaxError: await is only valid in async function
at new Script (vm.js:74:7)
at createScript (vm.js:246:10)
at Object.runInThisContext (vm.js:298:10)
at Module._compile (internal/modules/cjs/loader.js:670:28)
at Object.Module._extensions..js 
(internal/modules/cjs/loader.js:713:10)
at Module.load (internal/modules/cjs/loader.js:612:32)
at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
at Function.Module._load (internal/modules/cjs/loader.js:543:3)
at Module.require (internal/modules/cjs/loader.js:650:17)
at require (internal/modules/cjs/helpers.js:20:18)
Run Code Online (Sandbox Code Playgroud)

我正在运行节点v10.2.0和mongoose 5.1.2并且无法理解为什么我收到错误.

该mongoosejs文件明确指出,应该使用EXEC()使用异步何时返回承诺/等待是说这里

有什么建议?

mongoose node.js hapijs

0
推荐指数
1
解决办法
7398
查看次数

HapiJs 基于角色路由访问

我在服务器端使用 HapiJs 并希望根据角色进行路由配置,我想限制用户访问某些端点

var Hapi = require('hapi');

var server = new Hapi.Server();
server.connection({ port: 8000 });

server.route({
  method: 'GET',
  path: 'api1',
  handler: function (request, reply) {
    reply('Hello, world!');
  }
});

server.route({
  method: 'GET',
  path: 'api2',
  handler: function (request, reply) {
    reply('Hello');
  }
});

server.route({
  method: 'GET',
  path: 'api3',
  handler: function (request, reply) {
    reply('Hello');
  }
});

const parseHeader = (request, h) => {
   const { role } = JSON.parse(request.headers["roles"]);

};

server.ext("onRequest", parseHeader);

server.start(function () {
  console.log('Server running at:', server.info.uri);
}); …
Run Code Online (Sandbox Code Playgroud)

javascript node.js hapijs

0
推荐指数
1
解决办法
1209
查看次数