• 締切済み

googleapps ログインユーザの取得

googleappsのフォームのsubmitのイベント処理に スクリプトを書いていてそこで ログインユーザのe-mailアドレスを取得したいのです var to = Session.getActiveUser.getEmail() これでテストしてみたところ自分のe-mailアドレスが取得できたので できたと思ってほかの人にフォーム入力をしてもらったところ 取得した値は私のe-mailアドレスでした・・・・ これってスクリプトを作成者の情報を取得する!? ためしにgetEffectiveUser メソッド,getUserメソッドも試してみましたが 同じ結果です googleappsフォームを入力した人のe-mailを取得するスクリプトはどのようにしたらいいでしょうか?

  • h0712
  • お礼率64% (32/50)

みんなの回答

noname#247307
noname#247307
回答No.2

フォームの設定でログインを強制しても動作は同じですか? まずはそれを確認して下さい。フォームは、他のスプレッドシートやドキュメントなどのように利用を許可された人間だけがログインして使うのでなく、誰でもアクセスできるので、そのままではActiveUserがとれないのかも知れません。ログインを強制するよう設定してください。

h0712
質問者

お礼

フォームの設定でログインを強制しても同じ動作でした

noname#247307
noname#247307
回答No.1

>取得した値は私のe-mailアドレスでした・・・・ これって、どういう形で確認しています? 例えば、Loggerでログ出力させているとかですか。だとすると、例えばスクリプトが動作しておらず、最後に実行した結果が残っているということも考えられますが……。 ユーザーのログイン情報の取得は、基本的にSession.getActiveUser.getEmailでいいはずです。getEffectiveUserは確かdeprectedなので使わないで下さい。 これで取れるはずですが、しかし当たり前ですがログインできてないとスクリプトは正常に動きません。Google Appsユーザーなら、一番上の「フォームの設定」のところに、「このフォームを表示する際に○○へのログインを求める」というチェックがありますので、これをONにしてください。これで、フォームにアクセスすると強制的にログインされます。結果、Session.getActiveUser.getEmailで正常にメールアドレスが取れるようになるはずです。

h0712
質問者

お礼

お返事ありがとうございます 値の確認は自分に向けて取得した値をメールしています MailApp.sendEmail("自分のメールアドレス", "test", Session.getActiveUser().getEmail()); 自分でフォームをサブミットすれば当然メールの本文には自分のメールアドレスがセットされていますが 他の人がフォームを開いてサブミットしてもその人のメールアドレスではなく自分のメールアドレスが セットされています

関連するQ&A

  • GAS スプレッドシートの共有ユーザの取得

    googleappsのスクリプトなのですが googleドライブに保存して共有しているスプレッドシートの共有ユーザを プログラムで取得したくて以下のようにスクリプトを書きました var spsheet = SpreadsheetApp.openById('xxxx'); var user = spsheet.getEditors(); このように取得しようとしたのですが サーバー エラーが発生しました。しばらくしてからもう一度試してください。 となり取得できません・・・ どうやったら取得できるでしょうか?アドバイスお願い致します

  • GASスプレッドシートの編集した行を取得

    Googleappsのスプレッドシートのスクリプトで 何か文字を入力したらその行を取得したいのです onEditイベントにて function onEdit(event) { var sheet = event.source.getActiveSheet(); var range = event.source.getActiveRange(); var rowidx = range.getRow();  sheet.getRange(rowidx, 1, 1, 4).setBackgroundColor('#a9a9a9'); } このようにすると編集した行の色が変わるので確かにrowidxに編集した行を取得できていると 思います・・・ でも編集した行と1行目の2つの色がかわってるので色を変えたことにより もういっかい編集イベントが発生してしまっているのかな??? でここからが本題なのですが Logger.log(rowidx);を最後の行に追加して確認すると 1.0という値がセットされているのです スプレッドシートを編集したのは10行目だとしても・・・ もしかしてイベントが2回発生していてログには最後に実行されたものしか セットされてないから1.0になっているのかなと想像し 最後の行に以下のように記述して値を確認しました MailApp.sendEmail("hogehoge@xxxxx.xx", "test", rowidx); 飛んでくるメールは1通だけ(イベントは2回発生していない?) 値は1.0がセットされています スプレッドシートの何か値を変更したらその行番号の値を 取得するにはどうしたらいいでしょうか?

  • ユーザコントロールのイベント取得について(C#)

    環境:Visual Studio 2005 C# Windows Application フォームに自作のユーザコントロールを貼り付けてそのイベントを取得する勉強をしているものです。 フォームでのユーザコントロールイベントを取得して処理をする方法が分かりません。 状況 ユーザコントロールにはテキストボックスを追加しています。 また、フォームにそのユーザコントロールを追加しています。 確認したいことは、ユーザコントロールのテキストボックスになにか値を入力したタイミングでチェンジイベントをフォーム側で察知し、処理をするというものです。 どなたか、要点だけでもいいので教えていただけないでしょうか? 宜しくお願いいたします。

  • サブフォームのイベントを取得するには?

    同じソリューションにフォームA、フォームBがあり、フォームBは フォームAから起動されます。 フォームBがクローズした時、フォームAのメソッドを走らせたい のですが、その手段がわからず困っています。 別のフォームのイベントを取得する方法をご存知でしたら、 ご教授ください。 宜しくお願いします。

  • メールアドレス確認 javascriptについて

    入力フォームのメール項目にて 1.メールアドレスチェック 2.メールアドレス(確認用) のアラート設定を行いたいのですが、下記、javascriptの変更をどのように行っていいかが分からず困っています。 どなたかご回答お願いできますでしょう!? ------javascript部分-------------- <script language="JavaScript" type="text/javascript"> function CheckForm(theform) { var FormOK = false; if (theform.email1.value == "") { FieldControl(theform.To, "「メールアドレス」を入力してください。"); }else if (theform.email2.value == "") { FieldControl(theform.To, "「メールアドレス(確認用)」を入力してください。"); }else if (theform.email2.value == "") { FieldControl(theform.To, "入力されたものが一致するように入力してください。"); }else { FormOK = true; } return FormOK; } function FieldControl(element, message) { alert(message); } </script> ------HTML部分-------------- <form action="" method="post" name="theform" onsubmit="return CheckForm(this);"> メールアドレス:<input size="40" name="email1">(半角英数字)<br><br> 確認用】:<input size="40" name="email2"><br><br> <input value="確認画面へ" name="submit" type="submit"> </form> 宜しくお願い致します。

  • phpのページが白紙で表示される

    phpのページが白紙で表示される phpでメールフォームを作成しています。 フォーム画面から確認画面に遷移すると ページが白紙で表示されてしまい困っています。 生成されたページのソースをブラウザで見ても 何も書かれておらず、本当に白紙の状態です。 <html>より前に書いたソースに問題がありそうですが 理由がわかりません。 どなたか解決策にお心当たりございましたらお願いいたします。 以下問題のページ<html>までのソース ———————————————————— <?php function checkInput($var) { if (is_array($var)) { return array_map('checkInput', $var); } else { if (get_magic_quotes_gpc()) { $var = stripslashes($var); } if (preg_match('/¥0/', $var)) { die('不正な入力です'); } if (!mb_check_encoding($var, 'UTF-8')) { die('不正な入力です'); } return $var; } } session_start(); $_POST = checkInput($_POST); $sei = isset($_POST['sei']) ? $_POST['sei'] :NULL; $mei = isset($_POST['mei']) ? $_POST['mei'] :NULL; $address = isset($_POST['address']) ? $_POST['address'] :NULL; $email = isset($_POST['email']) ? $_POST['email'] :NULL; $error = array(); if (trim($sei) == '') { $error[] = '必須項目です'; } else if (mb_strlen($sei) > 10) { $error[] = '10文字以内でお願いいたします'; } if (trim($mei) == '') { $error[] = '必須項目です'; } else if (mb_strlen($mei) > 10) { $error[] = '10文字以内でお願いいたします'; } if (trim($address) == '') { $error[] = '必須項目です'; } else if (mb_strlen($address) > 100) { $error[] = '100文字以内でお願いいたします'; } if (trim($email) == '') { $error[] = '必須項目です'; } else { $pattern = '/^([a-z0-9¥+_¥-])(¥.[a-z0-9¥+_¥-]+)*@([a-z0-9¥-]+¥.)+[a-z]{2,6}$/iD'; if (!preg_match($pattern, $email)) { $error[] = 'メールアドレスの形式が正しくありません'; } $_SESSION['sei'] = $sei; $_SESSION['mei'] = $mei; $_SESSION['address'] = $address; $_SESSION['email'] = $email; $_SESSION['error'] = $error; if(count($error) > 0) { $dirname = dirname($_SERVER['SCRIPT_NAME']); $dirname - $dirname == DIRECTORY_SEPARATOR ? '' : $dirname; $uri = 'http://' . $_SERVER['SERVER_NAME'] . $dirname . '/present.php'; header('HTTP/1.1 303 See Other'); header('Location: ' . $uri); } else { ?> <html> ———————————————————— よろしくお願いいたします。

    • 締切済み
    • PHP
  • POSTで表示される検索フォームの結果の取得

    こんばんは。 とある外部サイトのサイト内検索スクリプトの検索結果を 取得しようといろいろと努力しているのですが、うまくいきません。 具体的には、そのサイトの検索スクリプトにフォームから MethodをPOSTにしてキーワードを送信すると、その結果が表示されるというものです。 しかし、その表示された結果を自分のサイトのPHPスクリプト から取得しようとしているのですが、何をしても叶いませんでした。 その検索スクリプトがGETメソッドで処理してくれるなら、 $keywords = "Search text"; file_get_contents("http://example.com/search.php?s=".$keywords); こんな感じで取得できると思うんです。 PHP初心者なので何を言っているのか分からないかもしれませんけど よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 前画面遷移した際に前回入力した値を入力してある状態

    前画面遷移した際に前回入力した値を入力してある状態にしたいです。 javascriptとPHPで入力フォームのコードを書いているのですが、入力フォーム(①画面)にて両方の言語で重複で値を保持したいです。 流れとしては、①入力フォーム→②確認画面なのですが。 PHPでは保持のコードは書けています。これをJavaScriptでも保持して重複保持したいです。 以下のURLを参考にしたのですが、 値の保持にsessionStorageというのがあるらしいです。 https://developer.mozilla.org/ja/docs/Web/API/Window/sessionStorage URLを参考に下の方にコードを書いてみたのですが、入力フォームを埋めて送信ボタンを押しても付属画像のようにメッセージが出て、次に進めません。どこが間違っているで ましょうか? 回答よろしくお願いいたします。 ●●①入力フォームのコード <?php session_start(); $errors = array(); if(isset($_POST['submit'])) { $name = $_POST['name']; $name = htmlspecialchars($name, ENT_QUOTES); if($name === "") { $errors['name'] ="名前が入力されていません。 "; } if(count($errors) === 0) { $_SESSION['name'] = $name; /* 確認画面の表示, */ header('Location:http:▼▼'); exit(); } } if(isset($_GET['action']) && $_GET['action'] === 'edit'){ $name = $_SESSION['name']; } ?> <?php echo "<ul>";foreach($errors as $value) { echo "<li>"; echo $value; echo "</li>"; } echo "</ul>"; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta content="text/html; charset=utf-8" /> <title></title> <script src="jquery-3.6.0.min.js"></script> <style type="text/css"> </style> </head> <body> <form action="orm1.php" method="post" id="form"> <p> 名前 </p> <input type="text" class="name" name="name" id="name" value="<?php if(isset($name)){ echo $name; } ?>" /> <button type="submit" id="submit" name="submit" class="auto-style4"> 送信</button> </form> </body> <script> const form = document.querySelector('#form'); const name = document.querySelector('#name'); form.addEventListener('submit', function(event) { let msg = ""; if (name.value == "") msg += "名前が入力されていません。\n"; if (msg == "") return; event.preventDefault(); alert(msg); }); var key = 'date_key'; var set_value = sessionStorage.getItem(key); $('name').val(set_value); $('name').on('change', function () { var value = $('#name').val(); sessionStorage.setItem(key, value); }); </script> </html>

  • EXCEL VBA twitter ログイン

    EXCEL VBAを利用しtwitterにログインしたいと思っております ログイン保持機能はoffにします https://twitter.com/login のソースを見てみると <label class="username js-username"> <span>ユーザー名、またはメールアドレス</span> <input class="js-username-field email-input" type="text" name="session[username_or_email]" autocomplete="on"> </label> <label class="password js-password"> <span>パスワード</span> <input class="js-password-field" type="password" value="" name="session[password]"> </label> とあるのですがid='xxxxxx'がなく nameで行けるかと思い objIE.Document.forms(0).item("session[username_or_email]").Value = ID でやってみたのですが実行するとエラーになってしまいます nameを指定して特定のフォームに入力する方法や これでと入力できるという方法を教えて頂けないでしょうか よろしくお願いいたします

  • php ログインでセッションが切れる

    PHPでログインする機能があります。 ログインして操作をしていると問題はないのですが、数分(測っていないのですが5分~10分)操作をせず放置しているとログインが切れてしまいます。 セッションの有効期限は24時間にしています。 確認してもセッションの有効期限はログインを行って24時間にちゃんとなっています。 if ($_SERVER['REQUEST_METHOD'] === 'POST') { try { // POSTで受け取ったパラメータを変数として展開 extract(filter_struct_utf8(INPUT_POST, array( 'email' => FILTER_STRUCT_FULL_TRIM, // トリミング 'pass' => '', 'token' => '', ))); // トークンをチェック Token::check($token); // IDをセッションに取得 $_SESSION['id'] = DB::connect()->userlogin($email, $pass); // セッションハイジャック対策 session_regenerate_id(true); // リダイレクト redirect(); } catch (Exception $e) { $errors = exception_to_array($e); } } 『userlogin』の部分 public function userlogin($email, $pass) { // 例外初期化 $e = null; // メールアドレスチェック if ($mail === '') { $e = e('メールアドレスが入力されていません。', $e); } // パスワードチェック if ($password === '') { $e = e('パスワードが入力されていません', $e); } // 1つでも例外が発生していればスローする if ($e) { throw $e; } // プリペアドステートメントを生成 $stmt = $this->pdo->prepare(implode(' ', array( 'SELECT `id`, `pass`', 'FROM `users`', 'WHERE `email` = ?', 'LIMIT 1', ))); // 値をバインドして実行 $stmt->execute(array($email)); // 見つかったかどうかチェック if (!$stmt->rowCount()) { throw e('そのメールアドレスは登録されていません。'); } // パスワード照合 $row = $stmt->fetch(); if ($row['pass'] !== password_hash($pass)) { throw e('パスワードが違います。'); } // IDを返す return (int)$row['id']; } ログイン処理に問題があるのでしょうか? それともサーバー側の設定(php.ini)なども何か設定を行ったほうがよいのでしょうか? 確認すべき点などございましたらアドバイスいただけませんでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう