はじめに
自身のWebアプリケーションにLINEログインを使ってログインできるようにしてみました。
LINEログインを使うことでユーザはLINEアカウントをWebアプリのユーザとして使用したり、
ログイン認証にLINEを使ってログインすることが可能になります。
公式サイトはこちらです。
https://developers.line.biz/ja/services/line-login/
環境
# |
項目 |
バージョン |
1 |
CentOS |
7.8 |
2 |
PHP |
7.2.29 |
3 |
Apache |
2.4.6 |
Messaging API とは異なり、サーバを外部公開せずとも動かすことができます。
今回は、ローカル環境に立てたCentOSのサーバを使って試していきます。
LINE Developers の設定
1. LINE Developers にログインする
https://developers.line.biz/ja/
LINEアカウントでログインできるので、自身のLINEアカウントでログインします。
LINEアカウントをもってない場合は、LINEアカウントを作りましょう。
2. LINEログイン の設定をする
プロバイダーを作って、チャネルを作成します。
チャネル作成をするときに、LINEログイン
を選択します。
お好きなチャネル名にし、その他必須事項を入力し、作成
をクリックします。
3. コールバックURL の設定をする
LINEログイン設定
タブにあるコールバックURL
に、LINEでログイン処理を行った後に遷移したいURLを指定します。
プログラム を書く
1.アクセストークンを取得する
下記のコードでアクセストークンを取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
$postData = array( 'grant_type' => 'authorization_code', 'code' => $_GET['code'], 'redirect_uri' => 'コールバックURLに設定したURLを記載', 'client_id' => 'チャネルID(LINEログインチャネルの管理画面から確認)', 'client_secret' => 'チャネルシークレット(LINEログインチャネルの管理画面から確認)', ); $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/oauth2/v2.1/token'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $json = json_decode($response); $accessToken = $json->access_token; //アクセストークンを取得 |
2.アクセストークンを基にユーザ情報を取得する
先ほど取得したアクセストークンを使って、アクセスしてきたユーザのLINEIDを取得します。
|
$ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $accessToken)); curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/v2/profile'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $json = json_decode($response); $userInfo= json_decode(json_encode($json), true); //ログインユーザ情報を取得する |
取得したユーザ情報userInfo
の中身は下記のように配列定義されています。
|
Array ( [userId] => XXXXXXXXXXXXXXXXXXX, ← ログインに使用したアカウントのID [displayName] => ○○○○, ← ログインに使用したアカウントの名前 ) |
userId
はシステム内で付与されているユニークなIDです。
ログイン処理に使用する場合は、こちらのIDを使用しましょう。
LINEメッセージを送る際も、このIDを使用するので、userId
を取得しておいた方がよいです。
3.ログインURLの設置
あとは、ログインURLを設置するだけです。
下記のURLをログイン処理をさせたいページに配置するだけで完了です。
乱数には、md5(uniqid())
を使用しました。
|
https://access.line.me/oauth2/v2.1/authorize?response_type=code&client_id=[チャネルID]&redirect_uri=[コールバックURLに設定したURLを記載]&state=乱数&scope=profile |
補足
1.Botと連携したい場合
ログインと同時に、MessagingAPIで作ったBotにお友だち登録をさせたい場合、
LINEログインのチャネル基本設定
のリンクされたボット
から連携させたいボットのチャネルを選択します。
そして、ログインURLにbot_prompt
を追加します。
|
https://access.line.me/oauth2/v2.1/authorize?response_type=code&client_id=[チャネルID]&redirect_uri=[コールバックURLに設定したURLを記載]&state=乱数&bot_prompt=aggressive&scope=profile |
この処理を実装すると、ユーザがLINEログインした後、チャットボットのチャネルをお友だち追加するかどうかを確認されます。
ユーザがお友だち追加を許可すると、ユーザへボットのチャネルを通してメッセージを送ることができるようになります。
bot_prompt
には、aggressive
以外にも、normal
があります。
詳細は下記をご確認ください。
https://developers.line.biz/ja/docs/line-login/link-a-bot/#displaying-the-option-to-add-your-line-official-account-as-a-friend
2.GETパラメータを追加したい場合
リダイレクトURLに対して、GETパラメータを渡したい場合があるかと思います。
https://hoge.com
というURLにGETパラメータを付けたい場合を例に説明します。
-
LINE Developers の設定
リダイレクトURLはそのままhttps://hoge.com
を設定します。
-
ログインURLのリダイレクトURLにGETパラメータを追加
リダイレクトURLにGETパラメータ?data=test
を追記します。
|
https://access.line.me/oauth2/v2.1/authorize?response_type=code&client_id=[チャネルID]&redirect_uri=https://hoge.com?data=test&state=乱数&bot_prompt=aggressive&scope=profile |
-
アクセストークンを取得する
リダイレクトURLにGETパラメータを追記します。
|
$postData = array( 'grant_type' => 'authorization_code', 'code' => $_GET['code'], 'redirect_uri' => 'https://hoge.com?data='.$_GET['data'], 'client_id' => 'チャネルID(LINEログインチャネルの管理画面から確認)', 'client_secret' => 'チャネルシークレット(LINEログインチャネルの管理画面から確認)', ); |
そうすると、GETパラメータのtest
という値が取得でき、かつLINEログインもできます。
さいごに
このように、LINEログインを使用することで、LINEのIDが取得できます。
DB上のLINEIDと比較し、一致していればログインを許可するとすればLINEログインの実装の完了です。
LINEIDを取得してDBに登録する処理やそのIDと一致するかの判定処理はご自身で実装してください。
今回、記載したように簡単にログイン実装することができるので、一度、試してみてください。