3

databasedotcom gem を採用しようとしていますが、認証を超えることができませんでした。これが私がしたことです(databasedotcom gemをインストールした後):

  1. rails c (または irb では「databasedotcom」が必要)
  2. client=Databasedotcom::Client.new :client_id => 'foo', :client_secret=>'bar'
  3. client.ca_file = '/Users/tjiang/missioncontrol/tmp/ca-bundle.crt'
  4. client.verify_mode = OpenSSL::SSL::VERIFY_PEER
  5. client.authenticate :username=>'myusername', :password=>'mypassword'

すべての資格情報はプロセスでコピー アンド ペーストされるため、間違いはありません。証明書はここからダウンロードされました: http://certifie.com/ca-bundle/ca-bundle.crt.txt

Ruby 187 と 193、および Rails の内部と外部を繰り返し試しましたが、常に次のエラー メッセージが表示されました。

Databasedotcom::SalesForceError: /Library/Ruby/Gems/1.8/gems/databasedotcom-1.3.0/lib/databasedotcom/client.rb:112:in `authenticate' からの認証失敗

ここで何を見逃したのだろうか?特に、Salesforce でリモート アクセスを作成するときに使用したコールバック URL が気になります (「oob」、「http://localhost:3000」、および「https://www.salesforce.com」を試しましたが、どれもありませんでした)。違いはありません)。

4

1 に答える 1

5

これは、databasedotcom のバグが原因であることが判明しました。ユーザー名とパスワードを使用して認証すると、それらはエンコードなしで URL クエリ文字列に入れられ、その URL でリクエストが POST されます。その結果、ユーザー名のプラス記号が空白として解釈されます。

解決策: ユーザー名とパスワードの両方を CGI::escape() します。

于 2012-05-12T15:35:15.440 に答える