お世話になります。
GASで出力したhtml(webアプリケーション)でパスワード制限をかけようとしているのですが、
スプレッドシート(GSS)のデータとの照合がうまくいっていないようなので
お知恵をお貸しいただけますでしょうか。
###やりたいこと
・indexにてパスワードを入力し送信
・GSS内のパスワードリストを照会し、正しければMenu1.htmlを、正しくなければMenu2.htmlを表示する
・GSS内のログシートへ、入場日時と照会の結果と使用パスワードを記録する
###状況
・パスワードリストに含まれている文字列を入力しても必ずMenu2へ遷移する
・特定のパスワードのみ有効な形式にしたときはMenu1に遷移できる(後述)
現在のコード
gas
1function doGet(e){ 2 var page=e.parameter["p"]; 3 4 if(page == "index" || page==null){ 5 return HtmlService.createHtmlOutputFromFile('Index'); //入口 6 } else if(page =="menu1"){ 7 return HtmlService.createHtmlOutputFromFile('Menu1'); //パスワード一致時に表示するページ 8 } else if(page =="menu2"){ 9 return HtmlService.createHtmlOutputFromFile('Menu2'); //パスワード不一致時に表示するページ 10 } else{ 11 return HtmlService.createHtmlOutputFromFile('Error'); //不正なURLを直打ちした時のページ 12 } 13} 14 15 16function doPost(e){ 17 Logger.log(e); 18 var SS = SpreadsheetApp.openById('***************************');//参照先のSSのID 19 var passSh = SS.getSheetByName('pass') //パスワード格納シート 20 var passVal = passSh.getDataRange().getValues(); //passシート内の値を取得 21 var LastRow = passSh.getDataRange().getLastRow(); //passシート内の最終行 22 var col = "B"; //passリストが記載されている列 23 24 var LogSh = SS.getSheetByName('test_log') //ログ記録シート 25 var date = new Date(); 26 var today = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd HH:mm"); //dateのフォーマット指定 27 28 var pass = e.parameter.name; //入力された文字列の受取 29 30 31 for(var row = 9; row <= LastRow-1; row++) { //rowを9行目から最終行まで値を1ずつ増加 32 if(passVal[row][col] === pass){ 33 var array = [date,"Success",pass]; 34 LogSh.appendRow(array); 35 return HtmlService.createHtmlOutputFromFile('Menu1').setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); 36 37 } else{ 38 var array = [date,"fail",pass]; 39 LogSh.appendRow(array); 40 return HtmlService.createHtmlOutputFromFile('Menu2').setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); 41 } 42 } 43}
※passShのパスワードが羅列されているリストは、
A B C
8 No PASS ユーザー名
9 1 hoge1 ユーザーA
10 2 hoge2 ユーザーB
といった感じで、以下400程度『No』『PASS』『ユーザー名』が続いています。
ユーザー名は入力式ではなく、使用されたパスワードと所持ユーザーを紐付けるためだけの目的です。
試した事
現状、ログシートには入力したとおり正常に記録されていて
文字化け等もないため、文字列は正常に受け取っているとは思います。
となると、if構文の中身に問題がある(照会の仕方が悪い)か、
passValが正しくデータを取得できていないか……のどちらかではないかと思っていますが……。
for構文を取り払って、if("hogehoge" === name)) { ......
という形にして
indexのパスワードフォームで『hogehoge』を入力すると、想定どおりMenu1へ移動しました。
初歩的な内容で大変申し訳ありませんが、どうぞよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。