2

これがばかげた質問だったら許してください、初心者プログラマーです。

Rails 3.2.14 アプリで Soundcloud API を使用してユーザーを認証しようとしています。次のように、Soundcloud 開発者ドキュメントから直接コードを使用しています。

client = Soundcloud.new(
                    :client_id => 'MY_CLIENT_ID',
                    :client_secret => 'MY_CLIENT_SECRET',
                    :redirect_uri => 'http://localhost:3000/auth/soundcloud/callback'
                    )

# redirect user to authorize URL
redirect_to client.authorize_url(:scope => 'non-expiring')

そして、コールバック URI を取得すると:

client = Soundcloud.new(
                    :client_id => 'MY_CLIENT_ID',
                    :client_secret => 'MY_CLIENT_SECRET',
                    :redirect_uri => 'http://localhost:3000/auth/soundcloud/callback'
                    )

# exchange authorization code for access token
code = params[:code]
access_token = client.exchange_token(:code => code)

すべて正常に動作します (アプリにアクセス許可を与えるために Soundcloud ページに移動します) が、コールバック URI に送り返されると、次のエラーが表示されます。

SoundCloud::ResponseError at /auth/soundcloud/callback
HTTP status: 401 Unauthorized Error: invalid_grant

私は明らかにこれをグーグルで検索しましたが、行われた唯一の提案は、トークンの有効期限が切れているということでした. 私は後で access_token を再利用しているのではなく、最初の認証を行っているだけなので、私には意味がありません。念のため、Soundcloud にリダイレクトするときに scope => non-expiring パラメータを含めましたが、違いはありませんでした。

助言がありますか?最近、Rails と Soundcloud の統合に成功した人はいますか? 私が見つけたすべてのリソースはかなり古くなっているようです。

4

1 に答える 1

0

access_token の :code を正しく交換していなかったときに、このエラーが発生しました。pryを使用して変数をチェックし、:code が nil でないことを確認してください

access_token の有効期限が切れたときにも表示されます。:scope => 'non-expiring' を渡していることは知っていますが、おそらくある時点でパラメーターが失われます

于 2014-07-18T04:31:23.113 に答える