ruby-on-rails - 新的 LinkedIn 权限问题(Rails omniauth-linkedin gem)

标签 ruby-on-rails authentication omniauth linkedin

我正在为我的 rails 应用程序使用 omniauth-linkedin gem:

https://github.com/skorks/omniauth-linkedin

它应该考虑到新的 LinkedIn 权限请求程序和范围,但我没有成功获得电子邮件地址或完整配置文件(默认配置文件概述以外的任何内容)。

这是我的 omniauth.rb 文件:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :linkedin, ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'], :scope => 'r_fullprofile r_emailaddress'
end

在用户输入她/他的凭据之前,完整的个人资料和电子邮件地址请求最初会发送到 LinkedIn。但是,一旦用户登录,范围请求就会丢失,并且只能访问默认配置文件概览信息。

我认为我的问题与必须在我想要的范围内专门请求这些字段有关,如 gem 页面 (https://github.com/skorks/omniauth-linkedin) 上所述。尽管如此,我还是尝试将特定的字段请求添加到我的 omniauth.rb 文件中,但没有成功(下面的电子邮件字段请求):
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :linkedin, ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'], :scope => 'r_fullprofile+r_emailaddress',
  :fields => ["id", "email-address", "first-name", "last-name", "headline", "industry", "picture-url", "public-profile-url", "location", "positions", "educations"]
end

显然,除了电子邮件地址、职位和教育等非默认字段外,我还应该请求个人资料概览的默认字段,以便访问这些非默认字段。

LinkedIn 电子邮件地址应该很简单,因为它不像职位或教育那样是结构化对象,而且我相信我缺少我想要的职位和教育中特定领域的代码(不知道我会如何写,并且会喜欢一些对此也有意见)。我正在使用我的新 API key ,所以我不确定可能是什么问题。我需要领英的某种特殊许可吗?帮助表示赞赏!谢谢你。

此外,这是我的身份验证 Controller 的相关代码:
require 'linkedin'

class AuthController < ApplicationController

  def auth
    client = LinkedIn::Client.new(ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'])

    request_token = client.request_token(:oauth_callback => 
                                      "http://#{request.host_with_port}/callback")

    session[:rtoken] = request_token.token
    session[:rsecret] = request_token.secret

    redirect_to client.request_token.authorize_url
  end

  def callback

    client = LinkedIn::Client.new(ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'])

    if current_user.atoken.nil? && current_user.asecret.nil?
      pin = params[:oauth_verifier]
      atoken, asecret = client.authorize_from_request(session[:rtoken], session[:rsecret], pin)
      current_user.atoken = atoken
      current_user.asecret = asecret
      current_user.uid = client.profile(:fields => ["id"]).id
      flash.now[:success] = 'Signed in with LinkedIn.'
    elsif current_user.atoken && current_user.asecret 
      client.authorize_from_access(current_user.atoken, current_user.asecret)
      flash.now[:success] = 'Signed in with LinkedIn.'
    end

最佳答案

不确定这是否是最优雅的解决方案,但这对我有用

我刚刚添加了在 request_token_path 中传递的范围的配置

LINKEDIN_CONFIGURATION = { :site => 'https://api.linkedin.com',
:authorize_path => '/uas/oauth/authenticate',
:request_token_path =>'/uas/oauth/requestToken?scope=r_basicprofile+r_emailaddress+r_network+r_contactinfo',
:access_token_path => '/uas/oauth/accessToken' }

client = LinkedIn::Client.new(LINKEDIN_API_KEY, LINKEDIN_SECRET_KEY, LINKEDIN_CONFIGURATION )

其余代码相同。

一定要更改回调方法中的客户端构造函数。

关于ruby-on-rails - 新的 LinkedIn 权限问题(Rails omniauth-linkedin gem),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12147151/

相关文章:

firebase - 如何在 flutter 中自动登录现有用户

ruby-on-rails - 如何创建默认的 "Guest" session ,以便设计助手 current_user 将显示我的访客用户?

ruby-on-rails - Devise + Omniauth [警告: Can't verify CSRF token authenticity]

ruby-on-rails - rails : retrieving image from Facebook after Omniauth login with Devise

ruby-on-rails - will_paginate for group query with sunspot 2.2.2 in rails

ruby-on-rails - Cancan 不显示授权的 View 元素

ruby-on-rails - ruby 的 "any?"和 "all?"方法在空数组和哈希上的行为

java - 使用 Spring Security 进行身份验证后,SecurityContextHolder.getPrincipal() 返回 AnonimousUser

ruby-on-rails - Omniauth/设计/Facebook : Auth route is not recognized

ruby-on-rails - 具有多个条件的 Rails 搜索