小编skp*_*rin的帖子

Rails强参数 - 允许参数为数组或字符串

在我的Rails控制器中使用强参数,如何声明允许的参数可以是a String还是Array

我强大的参数:

class SiteSearchController < ApplicationController
    [...abbreviated for brevity...]

    private
    def search_params
        params.fetch(:search, {}).permit(:strings)
    end
end
Run Code Online (Sandbox Code Playgroud)

我想要POST字符串搜索为String或作为Array:

要搜索一件事:

{
    "strings": "search for this"
}
Run Code Online (Sandbox Code Playgroud)

或者,搜索多个东西:

{
    "strings": [
        "search for this",
        "and for this",
        "and search for this string too"
    ]
}
Run Code Online (Sandbox Code Playgroud)

更新:

目的:我正在创建一个API,我的用户可以web-hooks在同一个端点上"批处理"请求(获取响应),或者一次性请求(立即获得响应).这个问题只是我要求的一小部分.

下一篇文章将使用相同的逻辑,我将允许搜索在多个页面上进行,即:

[
    {
        "page": "/section/look-at-this-page",
        "strings": "search for this"
    },
    {
        "page": "/this-page",
        "strings": [
            "search for this",
            "and for this", …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails strong-parameters

10
推荐指数
2
解决办法
4690
查看次数

Rails jsonb - 将 jsonb 保存到 Postgresql 数据库时,防止 JSON 键重新排序

我有一个列amount_splits,我需要按照我指定的键顺序将我的 JSON 保存到其中。

jsonbJSON 键保存到数据库时,如何防止 Rails / Postgres自动对其进行排序?(用于创建或更新)

看起来它试图按字母顺序排序,但做得很差。

这是我要保存的内容:

{
    "str_fee": 3.17,       # key 1
    "eva_fee": 14.37,      # key 2
    "fran_royalty": 14.37, # key 3
    "fran_amount": 67.09   # key 4
}
Run Code Online (Sandbox Code Playgroud)

这是它实际保存的方式:

{
    "eva_fee": 14.37,     # key 2
    "str_fee": 3.17,      # key 1
    "fran_amount": 67.09, # key 4
    "fran_royalty": 14.37 # key 3
}
Run Code Online (Sandbox Code Playgroud)

目的:

在您回答“在接收端消耗 JSON 时排序无关紧要”之前,请先停下来想一想……然后请继续阅读

我需要按照我需要的方式对键进行排序,因为使用此 JSON 的客户端界面正在向开发人员显示 JSON,这些开发人员需要按照文档告诉他们的顺序来显示 JSON。以及它需要的原因按照这个顺序是首先显示什么计算发生的过程:

正确的顺序告诉开发者:

首先str_fee应用 ,然后应用eva_fee,然后是fran_royalty... …

postgresql json ruby-on-rails jsonb ruby-on-rails-5

7
推荐指数
3
解决办法
2700
查看次数

如何使用在线工具手动验证JWT签名

根据我的理解,验证JWT签名是一个直接的过程.但是,当我使用一些在线工具为我做这件事时,它并不匹配.如何在JWT不使用JWT库的情况下手动验证签名?我需要一种快速方法(使用可用的在线工具)来演示如何完成此操作.

JWThttps://jwt.io/#debugger-io上创建了我的以下信息:

  • 算法: HS256
  • 秘密: hONPMX3tHWIp9jwLDtoCUwFAtH0RwSK6
  • 标题:
    {
      "alg": "HS256",
      "typ": "JWT"
    }
    
  • 有效载荷:
    {
      "sub": "1234567890",
      "name": "John Doe",
      "iat": 1516239022
    }
    
  • 验证签名(部分):
    • 秘密值改为上面
    • "已检查"秘密base64编码(无论是否检查,仍然获得不同的值)

智威汤逊:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.wDQ2mU5n89f2HsHm1dluHGNebbXeNr748yJ9kUNDNCA

手动JWT签名验证尝试:

使用base64UrlEncode计算器(http://www.simplycalc.com/base64url-encode.phphttps://www.base64encode.org/)

如果我:( 不是站点上的实际值,修改后显示最终为我构建的工具)

base64UrlEncode("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9") + "." + base64UrlEncode("eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ")

我明白了:

ZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5.ZXlKemRXSWlPaUl4TWpNME5UWTNPRGt3SWl3aWJtRnRaU0k2SWtwdmFHNGdSRzlsSWl3aWFXRjBJam94TlRFMk1qTTVNREl5ZlE=

注意:如果我应该对已经编码的值进行编码,或者按原样使用已经编码的值,那么我会有一些困惑.

(即使用base64UrlEncode("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9") + "." + base64UrlEncode("eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ")vs "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ").

无论我应该做什么,最终结果仍然与签名不符.我倾向于认为我应该重新编码的编码值,不管是真还是假.

然后使用HMAC Generator计算器(https://codebeautify.org/hmac-generatorhttps://www.freeformatter.com/hmac-generator.html#ad-output)

(不是网站上的实际价值,经过修改以显示最终为我构建的工具)

HMACSHA256( …

jwt

5
推荐指数
2
解决办法
2200
查看次数

AWS Elastic Beanstalk:尽管有 IAM 权限和自定义配置,但自定义 Cloudwatch 日志未显示

我在设置从 AWS Elastic Beanstalk 项目到 CloudWatch 的自定义日志文件流时遇到问题。作为参考,我尝试了“AWS Elastic Beanstalk:将自定义日志添加到 CloudWatch?”中的建议。无济于事。本质上,当我从主机下载日志时,我想要的日志文件位于/var/log/containers/api-1c080332ba3f-stdouterr.log/var/log/containers/nginx-a5057f87f4cf-stdouterr.log/var/log/containers/web-0a2e0762e8f0-stdouterr.log (其中数字在每次更新时都会更改)

我添加了一个新的自定义日志配置文件.ebextensions/log.config以下供参考):

packages:
  yum:
    awslogs: []

files:
  "/etc/awslogs/awscli.conf" :
    mode: "000600"
    owner: root
    group: root
    content: |
      [plugins]
      cwlogs = cwlogs
      [default]
      region = `{"Ref":"AWS::Region"}`

  "/etc/awslogs/awslogs.conf" :
    mode: "000600"
    owner: root
    group: root
    content: |
      [general]
      state_file = /var/lib/awslogs/agent-state

  "/etc/awslogs/config/logs.conf" :
    mode: "000600"
    owner: root
    group: root
    content: |
      [/var/log/containers/nginx-stdouterr.log]
      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/log/containers/nginx-stdouterr.log"]]}` …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-cloudwatch amazon-elastic-beanstalk amazon-cloudwatchlogs

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

如何将对docker-compose.yml所做的更改实施到分离的运行容器中

该项目当前正在此命令在后台运行:

docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

我需要对它们进行两项更改docker-compose.yml

  • 添加一个新的容器
  • 更新以前的容器以具有指向新容器的链接

进行更改后:

注意<--我的更改的“ ”箭头

web:
        build: .
        restart: always
        command: ['tini', '--', 'rails', 's']
        environment:
            RAILS_ENV: production
            HOST: example.com
            EMAIL: admin@example.com
        links:
                - db:mongo
                - exim4:exim4.docker # <-- Add link
        ports:
                - 3000:3000
        volumes:
                - .:/usr/src/app
db:
        image: mongo
        restart: always
exim4: # <-------------------------------- Add new container
        image: exim4
        restart: always
        ports:
            - 25:25
        environment:
            EMAIL_USER: user@example.com
            EMAIL_PASSWORD: abcdabcdabcdabcd
Run Code Online (Sandbox Code Playgroud)

进行更改后,如何应用它们?(不破坏任何东西)

我试过了,docker-compose down && docker-compose up -d但这破坏了Mongo DB容器...我再也不能这样做了...:sob: …

docker docker-compose

2
推荐指数
3
解决办法
931
查看次数

React AppendChild 组件不起作用

我一直在到处寻找,但找不到解决方案。

我只是想做到以下几点:

import ComponentOne from '../components/component-one'
import ComponentTwo from '../components/component-two'

class Home extends Component {
    constructor( props ) {
        // So I can dynamically call a Component, found no other way
        this.components = {
            ComponentOne: <ComponentOne />,
            ComponentTwo: <ComponentTwo />
        }
    }

    [...code removed for brevity...]

    _appendStep( step ) {
        var component = React.cloneElement(this.components[step])
        this.steps.appendChild( component )
    }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很简单。我有

<div className="recipe-steps" ref={(ref) => this.steps = ref}></div>
Run Code Online (Sandbox Code Playgroud)

我也需要动态appendChild组件。问题是,我附加到此的“步骤”<div>绝对需要是我创建的组件之一,需要允许我添加多个组件子级,甚至复制(这就是我使用的原因React.cloneElement())组件。

一旦我附加了所有“步骤”,稍后的过程将解析每个步骤以确定如何运行配方。

以下工作正常,但我不需要创建一个简单的 DOM 节点,我需要使用我已经构建并附加的组件

var basicElement …
Run Code Online (Sandbox Code Playgroud)

javascript dom reactjs react-dom

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

Twilio API - 如何选择退出电话号码

当一个新用户注册,我们打算给他们一个复选框,在那里他们可以OPT- IN或OPT- OUT接收短信的.

我可以通过确保我们的应用程序不按照自己的方式发送文本来轻松跟踪这个问题,但是我想知道在Twilio中选择添加它们是否更有意义?

我仍在玩这个想法,但不管我没有看到用于选择加入选择退出的任何API端点(https://www.twilio.com/docs/api).

问题:

  • 如果我选择去那条路线,我该如何选择拨打电话号码?
  • 最好是在我的最后管理这个列表,或者为此使用Twilio(如果可能的话),或者除了Twilio执行它之外还要冗余并管理我自己的列表?

sms twilio twilio-api

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