【问题标题】:Instagram::BadRequest 400: 'self' keyword requires an authenticated userInstagram::BadRequest 400:“self”关键字需要经过身份验证的用户
【发布时间】:2014-10-05 07:12:42
【问题描述】:

我是 Ruby on Rails 的新手,一直在尝试使用 Instagram API 创建一个 Web 应用程序来进行学习。

我想要实现的是

  1. 使用 Instagram API 进行身份验证
  2. 认证后返回用户基本信息

我使用 Github 上 Instagram gem 中显示的示例代码进行了编码。 以下是我目前编写的代码:

config/initializers/instagram.rb

require "instagram"

Instagram.configure do |config|
  config.client_id = "Hidden"
  config.client_secret = "for"
  config.access_token = "security reason"
end

app/controllers/auth_controller.rb

class AuthController < ApplicationController
  def index
  end

  def oauth
    # Redirect to Instagram's auth page
    redirect_to Instagram.authorize_url( redirect_uri: 'http://localhost:3000/result/index')
  end

  def callback
    response = Instagram.get_access_token(params[:code], redirect_uri: 'http://localhost:3000/result/index')

    # Save access_token in Cookie
    session[:access_token] = response.access_token

    # Save user name in Cookie
    session[:username] = Instagram.client( access_token: session[:access_token]).user.username
    session[:user_id] = Instagram.client( access_token: session[:access_token]).user.id

    # Redirect to photo list page
    redirect_to controller: "result", action: "index"
  end
end

app/controllers/result_controller.rb

class ResultController < ApplicationController
  def index
   @client = Instagram.client(:access_token => session[:access_token])
   @recent = @client.user_recent_media
  end
end

当我访问 localhost:3000/auth/oauth 时,会出现 Instagram 的授权请求页面。点击“授权”后,它会重定向到 localhost:3000/result/index,并带有参数“?code=”加上一些随机字母,并返回错误说明

ResultController#index GET 中的 Instagram::BadRequest https://api.instagram.com/v1/users/self/media/recent.json?client_id="xxxxxxxxxxxxxx": 400: 'self' 关键字需要经过身份验证的用户

我已经被这个问题困扰了几天...... 我还想显示用户的基本信息,例如用户的用户名、user_id、生物和个人资料图片。如何在视图和控制器中编码以显示此类信息?

非常感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails oauth instagram


    【解决方案1】:

    您似乎没有完成 OAuth 流程。

    在您的初始化程序中不要使用 access_token,此令牌对于使用 Instagram 登录/授权您的应用程序的用户是唯一的。

    redirect_uri 应该是你的回调 uri:

    http://localhost:3000/auth/callback
    

    这是用临时代码交换 access_token 的地方。它不应该是结果/索引。 redirect_uri 还必须与在 Instagram 开发者页面上为您的 OAuth 应用程序输入的匹配。

    http://instagram.com/developer/clients/manage/

    其他一切似乎都是正确的。我建议访问 Instagram Ruby Gem github 页面,那里有一些很棒的信息。

    https://github.com/Instagram/instagram-ruby-gem

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-15
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 2021-06-12
      • 2015-03-26
      相关资源
      最近更新 更多