0

我有一个运行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 的第二个不必要和误导性的提示,并希望得到任何指导!

谢谢你。

4

0 回答 0