【GAS】Gメール投稿するだけでWEBページの掲載画像を更新できる、かんたん日報表示システム(4)~パスワードを認証するシンプルな仕組み~
グループ内のメンバーに日課を画像で掲示するだけの、かんたんな日報ページをGAS(Google Apps Script)で作ってみました。WEBページの様に固定ページから確認でき、投稿者が電子メールで画像を送ることで、掲載画像が自動更新できるものです。
「かんたん日報表示システム」と名付けてみました。
このシステムは、簡単な画像しか掲載できないものの、一般のWEBページと違って管理者が更新の手間を負う必要がありませんし、電子メール(あるいは他のメッセージアプリ)と違って、スレッドをさかのぼってチェックしなくてもページに最新情報が常に掲示されている、という特長があります。
無料のGoogleアプリとGASで作ったシステムであり、全体の概要はこちらの記事で解説しています。
ーーーーー
GASのコードについて、最初にユーザがログインする部分のコードをちらで解説しました。
今回の記事では、ユーザがログインパスワードを打ち込んだ後、日報のページが表示されるまでの短い間に自動実行される、ログイン認証と掲載画像の準備の部分について、GASのコードの中身をご説明します。
ユーザからPOSTされたパスワードを認証するしくみ
このシステムでは、最初にアクセスした際に、まずdoGet( )関数を使って表示される以下のログイン用のWEBページが表示されます。ユーザはここからパスワードを打ち込んでボタンを押すと、GASの側にパスワード情報がPOSTされます。
<form
method="post"
action="https://script.google.com/macros/s/★デプロイID★/exec">
<input type="text" name="PW">
<input type="submit" value="送信する">
</form>
キーとなる部分は上記のコードとなります。
さて、GASに情報がPOSTされると、GASの側ではdoPost( )関数が作動します。今回の記事は、ここでパスワード認証をする部分からご説明します。
doPost()関数で入力値を照合する
doPost( )関数は、WEBページからPOSTされた情報を引数として使える関数で、ユーザのPOST送信を受けて作動します。
ユーザから入力された情報は、以下のコードで取り出します。
function doPost(e) {
var 変数 = e.parameter.変数名;
}
(上記でdoPostの引数としているeは宣言なしで使えます)
数値や文字の場合、変数eの子要素「parameter.変数名」指定することで、ユーザが<form>要素から「変数名」でPOSTした情報を取得できます。
そして、POSTした時に指定した変数名「PW」から文字を取り出し、これがパスワード”toko”と一致しているか比較することでパスワード認証を行っています。
具体的なGASのコードは以下の様になります。(テンプレートではなく、スプリプと内の記述です)
function doPost(e) {
//POST送信された要素名<PW>のデータを取得
var myPW = e.parameter.PW;
//パスワードは適宜なものに変えて使用ください
if(myPW == "toko"){
・・・(日報を表示するコード)・・・
}
}
if(myPW == "toko"){
・・・(日報を表示するコード)・・・
}
if構文で比較演算子を使って、一致する場合だけ日報を表示するための処理を行うという、非常にシンプルなコードで、これが今回のシステムのパスワード認証の仕組みです。
一般的なWEBページのパスワード認証方法との比較
WEBページにパスワード認証を実装する場合、アマチュア向けの最も簡単な方法はBasic認証と呼ばれる方法です。
これは特殊なファイル(.htaccessファイル)をWEBサーバにアップするだけで実装できる一方、機能としては単純なアクセス制限だけであり、複雑なログイン機能は実装できません。
今回のdoPOST()関数を用いた方法では、その後の処理を自由に記述できますので、パスワードに応じた複雑な機能(分岐処理など)を実装する事が可能です。
その他、ごく簡易な方法として、WEBページにJavaScriptでコードを埋め込んで実装する方法も使われます。
この方法は非常に簡便ですが、ブラウザでコードが読めてしまう(JavaScriptのコードはブラウザのメニューから閲覧可能です)ので、容易にパスワードがページ閲覧者に判明してしまう欠点があり、セキュリティ的にはかなり甘いものです。
GASによる今回ご紹介の方法では、GASのコード本体はGドライブ内にあり、WEBページ内にはパスワードの情報が無いので、ずっと安全な方法です。
さて、日報ページを表示する前に、本システムでは掲載する画像(メールで投稿されるものとします)を準備しています。
最初にログイン画面を出すタイミングで、fetchFile_List() というユーザ定義関数を起動させていますが、この機能はここで実装しています。
function doGet(e){
//投稿画像をGメールのスレッドから検索しリストを更新
fetchFile_List()
}
この関数で投稿された画像をGメールから抽出して、日報に掲載する準備をするのですが、これについては、次の記事でご説明します。
←前の記事はこちら
次の記事はこちら⇒
この記事が気に入ったらサポートをしてみませんか?