0

在 rails 2fa nexmo 上找到了一个 ruby​​ 验证教程,但其中一些在 Sinatra 上不起作用,因为框架有一些差异,并且不适合我正在制作的内容。谁能帮助我或引导我在我的 Sinatra 应用程序中使用Nexmo 验证?

post "/" do
  client = Nexmo::Client.new(key: 'mykey', secret: 'mysecret')
  response = client.send_verification_request(number   params[:phonenumber], brand: 'OpenINC')
  if response['status'] == '0'
    erb :code
  else
    erb :error
  end
end

get'/code' do
  erb :code
end

post '/code' do
  client = Nexmo::Client.new(key: 'mykey', secret: 'mysecret')
  response = client.check_verification_request(code: '1234', request_id: '00e6c3377e5348cdaf567e1417c707a5')

  if response['status'] == '0'
    erb :start
  else
    erb :error
  end
end

上面写着 mykey 和 mysecret 我把我的密钥和秘密放在了哪里,但只是不想把我的实际密钥和秘密放在 Stack OverFlow 上

4

1 回答 1

0

根据上面的代码,以及repo中的代码,问题只是request_idandcode值是硬编码的。

如果你:

  1. 存储request_id从响应到response = client.send_verification_request(number: params[:phonenumber], brand: 'OpenINC')呼叫,例如session[:request_id] = response['request_id']
  2. 获取用户在post /code路由中提交的代码,例如code = params[:code]
  3. request_id从路径session中检索例如post /coderequest_id = session[:request_id]
  4. 检查验证请求时使用codeand ,例如 `check_verification_request(code: code, request_id: request_id)request_id

然后代码将起作用。

完整的基本示例:

post "/" do
  client = Nexmo::Client.new(key: 'mykey', secret: 'mysecret')
  response = client.send_verification_request(number: params[:phonenumber], brand: 'OpenINC')

  # 1. Store request_id
  session[:request_id] = response['request_id']

  if response['status'] == '0'
    erb :code
  else
    erb :error
  end
end

get'/code' do
  erb :code
end

post '/code' do
  # 2. Get the user verification code
  code = params[:code]

  # 3. Retrieve the request_id
  request_id = session[:request_id]

  client = Nexmo::Client.new(key: 'mykey', secret: 'mysecret')

  # 4. Use the code and request_id
  response = client.check_verification_request(code: code, request_id: request_id)

  if response['status'] == '0'
    erb :start
  else
    erb :error
   end
end

我还在这里提交针对您的 repo 的 PR,其中包含主要详细信息。

于 2016-06-23T21:18:44.987 回答