LinkedIn OAuth 2.0: неопределенная локальная переменная или метод `oauth' для #‹LinkedinController:0x7d15970›

Я использую драгоценный камень LinkedIn OAuth 2.0. Прямо сейчас я могу заставить его создать страницу входа в систему linkedin. Однако следующее, что должно произойти, это отправить на мою ссылку обратного вызова код, который я использую для создания токена доступа. Проблема в том, что переменная oauth генерируется в действии аутентификации, но затем ее необходимо снова использовать в действии обратного вызова. Я попытался снова сгенерировать переменную oauth, используя те же самые параметры, но когда я это делаю, я получаю ошибку сертификата SSL. Похоже, что в обоих случаях необходимо использовать один и тот же экземпляр oauth. Дайте мне знать, если у вас есть какие-либо мысли. Мой код ниже:

def authenticate

    require "linkedin-oauth2"


    LinkedIn.configure do |config|
      config.client_id     = "Mycode"
      config.client_secret = "Mysecret"

      # This must exactly match the redirect URI you set on your application's
      # settings page. If your redirect_uri is dynamic, pass it into
      # `auth_code_url` instead.
      config.redirect_uri  = "http://localhost:3000/auth/linkedin/callback"
    end


    oauth = LinkedIn::OAuth2.new()


    url = oauth.auth_code_url

    redirect_to url

end


def callback

    require "linkedin-oauth2"



    code = params[:code]

    access_token = oauth.get_access_token(code)

    api = LinkedIn::API.new(access_token)

    my_job_titles = api.profile(fields: ["id", {"positions" => ["title"]}])

    puts my_job_titles

    redirect_to("/")

end

конец


person Mitch Kirby    schedule 28.02.2016    source источник


Ответы (1)


Получение ошибки SSL-сертификата не означает, что создание экземпляра было неверным. Я не знаю этого драгоценного камня, но я не понимаю, почему это может быть проблемой.

Внутри метода не должно быть блока require и configuration (может забыли конфигурацию из второго метода?); лучшее место для них в config/initializers/linkedin_oauth2.rb.

Если вы не хотите загружать его при запуске, вы можете поместить их в приватный метод oauth с мемоизацией:

def oauth
  @oauth ||=
    begin
      require "linkedin-oauth2"
      LinkedIn.configure do |config|
        ...
      end
      LinkedIn::OAuth2.new()
    end
end

Если ошибка SSL все еще возникает, вы должны исследовать это. Вы можете попробовать создать простой Ruby-скрипт с каким-нибудь примером из файла readme, просто чтобы проверить подключение к LinkedIn.

Похоже, гем использует жемчужина Фарадея для HTTP, вы также можете попробовать использовать его напрямую, чтобы сделать простой вызов LinkedIn.

person Leventix    schedule 29.02.2016