ゼットコードログ

コード的な何かを書いていきます。

LINEのソーシャルログインでメールアドレスを取得する

Webアプリを作っていると時々ソーシャルログインをやることがあります。 要件によってはユーザーのメールアドレスを取得することもあります。

FacebookTwitterだと、コールバックで飛んできた内容にそのままメールアドレスが含まれているのでそれを使えばいいんですがLINEだと含まれていません。 どこにあるかというと、IDトークンの中にひっそりと入っています。

Rubyだとominiauth-lineというgemがあるんですが、オリジナルだとid_tokenを取得できないのでfolkしてコードを1行追加しました。

github.com

こんな感じで調整しました。

  info do
    {
      name:        raw_info['displayName'],
      image:       raw_info['pictureUrl'],
      description: raw_info['statusMessage'],
      id_token:    access_token.params['id_token'] # これを追記
    }
  end

こうやって調整したgemを使えば、コールバック時に含まれているid_tokenを解析して、メールアドレスが取得できます。 もちろん、APIでemailを受け取れる設定にしておく必要があるのと、そもそもユーザーが了承しないとダメです。

コールバックの処理のところでこんな感じで使う。

payload = JWT.decode(id_token, your_secret_key, true, algorithm: 'HS256').first
email = payload['email']