質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

0回答

1862閲覧

railsでLINEログイン機能にてアクセストークンを取得したい。

jun3030

総合スコア16

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/08/13 10:48

前提・実現したいこと

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_urlclient_id,client_secretの値も確認しましたが合っていました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問