LINEのソーシャルログインでメールアドレスを取得する
Webアプリを作っていると時々ソーシャルログインをやることがあります。 要件によってはユーザーのメールアドレスを取得することもあります。
FacebookやTwitterだと、コールバックで飛んできた内容にそのままメールアドレスが含まれているのでそれを使えばいいんですがLINEだと含まれていません。 どこにあるかというと、IDトークンの中にひっそりと入っています。
Rubyだとominiauth-lineというgemがあるんですが、オリジナルだとid_tokenを取得できないのでfolkしてコードを1行追加しました。
こんな感じで調整しました。
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']