omniauth-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番目の不要で誤解を招くプロンプトを取り除く方法を理解できず、ガイダンスをいただければ幸いです。
ありがとうございました。