From c69ab3d2363b78a91b73e9b4e9dd799fad461a87 Mon Sep 17 00:00:00 2001 From: Vincent Li Date: Sat, 4 Feb 2023 16:48:29 +0800 Subject: [PATCH] feat: fetch line email --- lib/omniauth/strategies/line.rb | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/lib/omniauth/strategies/line.rb b/lib/omniauth/strategies/line.rb index e195dd1..3bd9f42 100644 --- a/lib/omniauth/strategies/line.rb +++ b/lib/omniauth/strategies/line.rb @@ -25,10 +25,21 @@ def callback_phase { name: raw_info['displayName'], image: raw_info['pictureUrl'], - description: raw_info['statusMessage'] + description: raw_info['statusMessage'], + email: raw_info["email"] } end + def email + params = { + id_token: @id_token, + client_id: client.id + } + + response = Net::HTTP.post_form(URI("https://api.line.me/oauth2/v2.1/verify"), params) + JSON.load(response.body)["email"] + end + extra do hash = {} hash[:id_token] = access_token['id_token'] if access_token['id_token'].present? @@ -38,11 +49,24 @@ def callback_phase # Require: Access token with PROFILE permission issued. def raw_info - @raw_info ||= JSON.load(access_token.get('v2/profile').body) + return @raw_info if @raw_info.present? + + @raw_info = JSON.load(access_token.get('v2/profile').body) + @raw_info["email"] = email + @raw_info rescue ::Errno::ETIMEDOUT raise ::Timeout::Error end - + + def build_access_token + verifier = request.params["code"] + get_token_params = {:redirect_uri => callback_url}.merge(token_params.to_hash(:symbolize_keys => true)) + result = client.auth_code.get_token(verifier, get_token_params, deep_symbolize(options.auth_token_params)) + @id_token = result.params["id_token"] + + return result + end + def callback_url full_host + script_name + callback_path end