我有一个运行omniauth-linkedin gem 和linkedin gem(本质上是一个API 包装器)的Rails 应用程序。当用户登录时,他们会收到一个主要的登录提示,向他们显示正确的范围(完整的个人资料和电子邮件地址),如下所示:
但是,在他们登录后,他们会收到另一个不应该出现的登录提示,并且忽略了初始范围请求。它告诉他们 LinkedIN 只是请求他们的 PROFILE OVERVIEW,这是不正确的:
问题一定出在我的 auth_controller 上,我认为这与在其中一个身份验证阶段创建的 url 有关(绝对是在用户输入他们的 LinkedIn 身份验证凭据之后)。这是我的 auth_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 session[:atoken].nil?
pin = params[:oauth_verifier]
atoken, asecret = client.authorize_from_request(session[:rtoken], session[:rsecret], pin)
session[:atoken] = atoken
session[:asecret] = asecret
@user = current_user
@user.uid = client.profile(:fields => ["id"]).id
flash.now[:success] = 'Signed in with LinkedIn.'
else
client.authorize_from_access(session[:atoken], session[:asecret])
@user.uid = client.profile(:fields => ["id"]).id
flash.now[:success] = 'Signed in with LinkedIn.'
end
@user = current_user
@user.save
redirect_to current_user
end
end
以防万一,这是我的 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 的第二个不必要和误导性的提示,并希望得到任何指导!
谢谢你。