今までLINEの公式アカウントのリッチメニューで「ID連携」などのメニューでLINEアカウントと自社サイトの会員データとの連携をしたことはあるのですが、WordPressで実現できるかためしてみました。
今回はWordPressのユーザーに会員登録してカスタムフィールドにLINE-ID、LINE表示名、プロフィールURLを保存する仕組みです。メールアドレスの取得が必須のなるのですが最近はLINE側の審査が厳しいので今回はダミーアドレスで登録です。つくってみるといろいろと課題が見えました。
カスタムフィールドで認証が必要なページを設定
まずはログイン認証が必要なページを設定します。
カスタムフィールドに「LINE認証が必要」という項目を追加します。
「line_authentication_required」という名前で登録です。プラグインで
add_action(‘template_redirect’, ‘line_login_protect_post’);
で関数登録します。
アクションフック「template_redirect」はページが表示される最初のタイミングで何かを実行されるものです。
表示前にline_login_protect_post関数を実行してということです。
関数内では
if (get_post_meta(get_the_ID(), ‘line_authentication_required’, true)) {
とう条件でページIDから呼び出されたメタデータ「line_authentication_required」が有効だったら実行です。
これで特定のページだけLINE認証が必要なページが実現できます。
LINE認証とコールバックURLをプラグインで実施
認証成功したらクッキーに特定の情報を書き込むようにしてそのクッキー値がなければLINE認証画面へリダイレクトです。認証画面へ遷移する際にデベロッパー画面で表示されているクライアントIDとユニークなキーを_line_stateという引数で渡す必要があります。
認証許可してLINEログインが成功すると設定したコールバックURLが呼ばれます。
コールバックのURLはパラメータにline_callbackをつけるようにしてプラグイン側では
if (isset($_GET[‘line_callback’])) {
としてコールバックのアクセスなのかを判別します。
引数で_line_stateが渡されますので、認証画面に移動する際に利用した変数をセションやクッキーに保存して比較します。これで不正アクセスを防ぎます。値が同じならアクセストークンを発行してLINEユーザー情報を取得します。
ユーザー登録
無事LINEユーザー情報を取得できたら既存会員データとして登録されているかの確認です。
ここが手こずるかと思ったのですが、メタ情報にLINE-IDがあるかのチェックだけなら簡単でした。
// メタ情報に保存されているLINE IDからユーザーIDを取得する関数
function get_user_id_by_line_id($line_id) {
$user_query = new WP_User_Query(array(
'meta_key' => 'line_id',
'meta_value' => $line_id,
));
$users = $user_query->get_results();
if (!empty($users)) {
return $users[0]->ID;
}
return 0;
}
問題はワードプレスユーザーの登録です。
ワードプレスユーザーは名前がユニークである必要があるのですね。
LINE名で登録すると普通に重なってしまいます。LINE-IDをユーザー名としてニックネームにLINE名入れるのがいいかなやみどころです。
会員登録のワードプレスの関数は充実しているので登録自体は簡単ですね。LINEの情報もメタ情報として簡単にとろくできます。
$user_id = wp_create_user($username, wp_generate_password(), $email);
// その他のユーザーメタ情報を設定
update_user_meta($user_id, 'line_id', $line_user_info['line_id']);
update_user_meta($user_id, 'line_displayName', $line_user_info['displayName']);
update_user_meta($user_id, 'line_pictureUrl', $line_user_info['pictureUrl']);
ワードプレス認証
ワードプレスのアカウント登録ができたので、ワードプレス認証も可能になります。
ただ、LINE専用のページを見せるのにワードレス認証をさせる必要があるかはサイト次第ですね。
クッキー値見てページ表示させるだけならワードプレス認証は不要かと思いました。
いろいろな課題
ユーザー情報をワードプレスのユーザーとしたことで
- MyPageのアカウント登録はどうするか、
- LINE以外から登録がある場合の名寄せはどうするか、
- 名前の登録とニックネームはどう管理するか
- メールのダミーアドレスはどうするか
など様々な課題が見えてきました。最初から会員データの統合を意識してつくるか、LINEはLINE会員と割り切ってリッチメニュー経由のページだけを見せる認証にしたほうが管理しやすいのではなど考えさせれました。