前提・実現したいこと
railsのアプリにLINEログイン機能を実装しようとしています。
そこでLINEのユーザープロフィールを取得する際にaccess token
が必要になってくるのですが、これを取得したいです。
ユーザーがLINEログインを使用してアプリにログインし、アプリがアクセストークンを取得した後で、Social APIを呼び出してユーザーのLINEプロフィール情報を取得するという流れになっているのですが、ログインまでしか実装できていないのが現状です。
ライン公式ドキュメントを参考作業したのですがaccess token
を取得するには以下のパラメーターを含めてリクエストをhttps://api.line.me/oauth2/v2.1/token
に送信するのですがこれが上手くいきません汗
LINEログインを実装した事がある方や、詳しい方いましたらご教授頂けないでしょうか汗
お忙しい中申し訳ありません。
発生している問題・エラーメッセージ
{"error"=>"invalid_grant", "error_description"=>"invalid authorization code"}
該当のソースコード
ruby
1class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 2 require 'net/http' 3 require 'uri' 4 require 'json' 5 6 def line; basic_action end 7 8 private 9 10 def basic_action 11 # 以下ログインの実装 12 @omniauth = request.env['omniauth.auth'] 13 if @omniauth.present? 14 @profile = SocialProfile.where(provider: @omniauth['provider'], uid: @omniauth['uid']).first 15 if @profile 16 @profile.set_values(@omniauth) 17 sign_in(:user, @profile.user) 18 else 19 @profile = SocialProfile.new(provider: @omniauth['provider'], uid: @omniauth['uid']) 20 email = @omniauth['info']['email'] ? @omniauth['info']['email'] : "#{@omniauth['uid']}-#{@omniauth['provider']}@example.com" 21 @profile.user = current_user || User.create!(email: email, name: @omniauth['info']['name'], password: Devise.friendly_token[0, 20]) 22 @profile.set_values(@omniauth) 23 sign_in(:user, @profile.user) 24 # redirect_to edit_user_path(@profile.user.id) and return 25 end 26 end 27 flash[:success] = "ログインしました。" 28 redirect_to root_path 29 end 30 31 def set_access_token 32 # アクセストークン取得コード 33 uri = `curl -X POST https://api.line.me/oauth2/v2.1/token \ 34 -H 'Content-Type: application/x-www-form-urlencoded' \ 35 -d 'grant_type=authorization_code' \ 36 -d 'code="#{params[:code]}"' \ 37 -d 'redirect_uri=https://270281e59780.ngrok.io/users/auth/line/callback' \ 38 -d 'client_id=xxx' \ 39 -d 'client_secret=xxx'` 40 @api = JSON.parse(uri) 41 end 42 43 def fake_email(uid,provider) 44 return "#{auth.uid}-#{auth.provider}@example.com" 45 end 46
試したこと
ユーザーの認証と認可が完了すると、アクセストークン取得に必要なパラメーター(code
)が帰ってくるのですが、debuggerにて内容を確認したところしっかり取得できていましたし、redirect_url
やclient_id
,client_secret
の値も確認しましたが合っていました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー