0

ruby on rails 2fa nexmo verify tutorialを見つけましたが、フレームワークにいくつかの違いがあり、私が作成しているものに適合しないため、一部は Sinatra で機能しません。Sinatra アプリでNexmo Verifyを使用する方法を教えてくれる人はいますか?

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_idとのcode値がハードコーディングされていることです。

もし、あんたが:

  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

また、主な詳細を含むこのコミットを使用して、ここにレポに対する PR を送信しました。

于 2016-06-23T21:18:44.987 に答える