この記事について
| 環境 | LIFF + Flask |
|---|---|
| 目的 | LIFFアプリでユーザーのLINE IDと表示名を取得する |
| 結果 | liff.getProfile()と、IDトークンをサーバーで検証する方法の2通りを整理 |
つまずきポイント要約
- getProfile()で取った値をそのまま自前サーバーに送るのはセキュリティ上非推奨
- サーバーに送るならIDトークンをLINEのverifyエンドポイントで検証して取得する
- メールアドレスも取得したい場合はOpenID Connectの申請が必要
lineのliffでユーザーのline idやユーザー名を取得する方法
方法1
liff.getProfile()を利用
jsファイル
$(function () {
//LIFFアプリの初期化。このメソッドのあとLIFF SDKの他のメソッドを実行できるようになる
liff.init({
liffId: 'xxxxxxxxxxxxxxxxx',
//初期化が終わったら
}).then(() => {
liff.getProfile().then(function (profile) {
// 非同期処理が成功した場合
const line_userid = profile.userId;
const line_displayname = profile.displayName;
//alert("line_userid: " + line_userid + "\nline_displayname: " + line_displayname);
}).catch(function (error) {
// 非同期処理が失敗した場合
// handle error
});
ただしこの方法で取得したユーザーidやユーザー名を自前サーバーに送ることはセキュリティ上推奨されていない。そこで以下の方法で取得する必要がある。
方法2
IDトークンを利用

LIFFアプリおよびサーバーでユーザー情報を使用する
ユーザーが、LIFFブラウザでLIFFアプリを起動したり、外部ブラウザでLIFFアプリを起動してメソッドでログイン処理を行ったりすると、LIFFアプリはユーザーのプロフィール(ユーザーID、表示名、プロフィール画像、メールアドレス)を取得できます。LIFFアプリで、これらのユーザー情報を正しく処理しないと、なりすましや...
jsファイル
liff.init({
liffId: '/ajax',
//初期化が終わったら
}).then(() => {
const accessToken = liff.getAccessToken();
const idToken = liff.getIDToken();
// ajax通信
$.ajax({
url: 'xxxxxxxxxxx', //アクセスするURL
type: 'POST', //デフォルトはGET
cache: false, //cacheを使うか使わないかを設定
data: {
"accessToken": accessToken,
"idToken": idToken
} //アクセスするときに必要なデータを記載
})
views.py
@liff.route("/ajax", methods=["POST"])
def ajax():
if request.method == "POST":
accessToken = request.form["accessToken"]
idToken = request.form["idToken"]
data = {"id_token": idToken, "client_id": "1661541967"}
# LINE APIにリクエストを送信する
response = requests.post(
"https://api.line.me/oauth2/v2.1/verify",
data=data,
)
if response.status_code == 200:
print("投稿成功")
# LINE APIから、ユーザーのプロフィール情報を取得する
user_profile = response.json()
else:
print("投稿失敗")
詳細

LINEログイン v2.1 APIリファレンス
また、この方法でユーザーのメールアドレスを取得したい場合は、OpenID Connectの申請が必要になる。

OpenID Connectの申請方法 | リタッチ
お客様の公式LINEアカウントでキャンペーンを開催する方法です。LINEアプリ上で、参加者のアカウントと自動連携され応募が可能になります。
