0

omn​​iauth-linkedingemとlinkedingem(基本的にはAPIラッパー)を実行しているRailsアプリケーションがあります。ユーザーがログインすると、次のように、正しいスコープ(完全なプロファイルと電子メールアドレス)を表示するプライマリログインプロンプトが表示されます。

ここに画像の説明を入力してください

ただし、ログインすると、表示されるべきではない別のログインプロンプトが表示され、最初のスコープ要求は無視されます。LinkedINがプロファイルの概要のみを要求していることを示していますが、これは正しくありません。

ここに画像の説明を入力してください

問題は私のauth_controllerにあるはずであり、それは認証段階の1つで作成された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からの2番目の不要で誤解を招くプロンプトを取り除く方法を理解できず、ガイダンスをいただければ幸いです。

ありがとうございました。

4

0 に答える 0