はじめて、投稿させていただきます。
現在、自社内で運用がおこなえるかをこれから勉強しながら実験をしています。
初歩的な事かもしれないのですが、ログイン画面にあるユーザ名が表示されていますがこれを、毎回入力させたいと考えています。ヘルプを見ると”MOODLEID”の設定変更すればと書いてあるのですが理解できず悩んでいます。
ご存知の方がいましたらご助言を頂けると助かります。よろしくお願いします。
”ログイン画面にあるユーザ名が表示されていますが”とは下の図のような状態のことでしょうか? IE等のブラウザでMoodleのサイトにアクセスした直後に表示されるログイン画面で,誰も入力していないのにユーザ名の欄が自動入力されている状態.
だとしますと,これはブラウザ(IE,Firefoxなど)の機能です.Moodle側ではどうしようもありません.各ブラウザでこの機能を無効にする方法は異なります.
多分,会社の職場にある共用の端末でMoodleにアクセスする環境と推察しました.ユーザ名だけならまだしも,パスワードまでブラウザに記録させると,誰でもログインできてしまいますので危険ですね.
Shirai 様、早々に返事を頂きましてありがとうございます。
又、質問の説明不足によりご迷惑をお掛けして申し訳有りません。
ご推察の通りで、画面イメージを貼り付けて頂いたユーザ名の項目欄をログアウト後はブランクにしたいと考えています。(利用者ユーザは、ログイン時には毎回、ユーザ名+パスワードを入力)
> ローカルなアドレスではなく,グローバルなアドレスであるならば,このアドレスを教えて頂けないでしょうか.
>
すみません、まだローカル環境での実験中で外からでは見れない環境となっています。
気づいたのですが、こちらのサイトにログインしログアウトした後にはユーザ名が表示されていました。試しに、ブラウザ(IE6.0)の設定でCookieの削除をしてプラウザ再表示させた所、ユーザ名はクリアーされていたのでやはり、ブラウザ側の問題ですね。
私の勘違いで、ヘルプに”MoodleSession ”、”MOODLEID”等が記述されていたのでMoodle側でクッキーを拒否する設定があるのかと思い込んでしまいました。
ありがとうございました。
もしかしたら仰るとおり,Moodleが絡んでいる可能性が少し出てきました.
オートコンプリートを全てOFFにした状態での実験結果です.
ブラウザ(IE)を全て閉じてMoodleにアクセスしてログイン画面を表示します.
まず,一時ファイルその他を全て削除した状態ではログイン名の欄は空です.
ここで正しくログインします.IEを全て閉じてから再びIEを起動してログイン画面を出すとログイン名が勝手に入力されています.
Cookie以外のデータを削除して,一旦,IEを全て閉じます.
そしてIEを再び起動してログイン画面を出すとログイン名が勝手に入力されます.
次はCookieを消して,一旦,IEを全て閉じます.
そしてIEを再び起動してログイン画面を出すとログイン名の欄は空欄です.これが望ましい状態ですね.
ここで正しくログインして,ログアウト後にIEを一旦閉じます.
そしてIEを再び起動してログイン画面を出すとログイン名の欄が勝手に入力されている.
まだ推測の域を出ませんが,もしかしたらMoodleのJavaScriptで,最後に正しくログインできたユーザのCookie(PCのアカウントを共有していない場合は自分自身のCookieですね)からユーザ名を抜き出して,FORMのname=usernameを変更している可能性がゼロではありません.なにせ便利ですので.
現状では,ログアウト後はブラウザを必ず閉じるように,それとブラウザを閉じる際にCookieを全て削除するようにIEを設定するしか無いかも知れません.暇ができたらlogin関係のソースを見てみようと思います.
#でもパスワードのオートコンプリートは共用のパソコンでONにしておくのは危険ですので,グループポリシーだったかな?でOFFにできるのであれば管理者権限でOFFにした方が良いでしょうね.
ビンゴでした.Moodleが犯人(?)です.
login/index.phpの287行目あたり(Moodle1.9.1+)にそのコードがあります.
/// Generate the login page with forms
if (get_moodle_cookie() == '') {
set_moodle_cookie('nobody'); // To help search for cookies
}
if (empty($frm->username) && $authsequence[0] != 'shibboleth') { // See bug 5184
// $frm->username = get_moodle_cookie() === 'nobody' ? '' : get_moodle_cookie();
$frm->username = get_moodle_cookie() === 'nobody' ? '' : '';
$frm->password = "";
}
if (!empty($frm->username)) {
$focus = "password";
} else {
$focus = "username";
}
grepで探したら一発で出てきましたねぇ...
ちょっと変なコードのような気もしなくは無いですが...
一応,上の修正のように行なうことでログイン名の自動入力は防げますが.もしかしたらその上にあるset_moodle_cookie('nobody');をifブロックの外側に出す方が今後のlogin.phpの更改に強い可能性があります.たとえば以下のように.
/// Generate the login page with forms
// if (get_moodle_cookie() == '') {
set_moodle_cookie('nobody'); // To help search for cookies
// }
if (empty($frm->username) && $authsequence[0] != 'shibboleth') { // See bug 5184
$frm->username = get_moodle_cookie() === 'nobody' ? '' : get_moodle_cookie();
$frm->password = "";
}
if (!empty($frm->username)) {
$focus = "password";
} else {
$focus = "username";
}
ただ,一般的にはこの改造は不要だと思いますので,fs_moodleでは取り込みません.いやぁ,でもMoodleがクロだとは意外でした.
重箱の隅をつつくような話ではありますが,完璧を望むならば,login/index.phpの可能な限り上のほうに,set_moodle_cookie('');を追加する方法が良いのかも知れません.
と言いますのは,110行あたりで,
if (empty($CFG->usesid) and $testcookies and (get_moodle_cookie() == '')) { // Login without cookie when test requested
というコードがあります.もしかしたら矛盾を生じる可能性がゼロではありません.気にし過ぎかも知れませんが.
#これはこれでより強い副作用が生じる可能性もあります.
先の改造例の2番目も危険といえば危険です.login/index.phpをアクセスするたびに,ログイン状態であるにも関わらずクッキーをnobodyに変えてしまうのですから.そういう意味では一番最初の改造案が一番無難で安全かも知れません.色々と検証してみて下さい.
Shirai 様、修正箇所を教えて頂きましてありがとうございます。
早速、改造をして実験してみました。
一番目の方法を試した所、希望していた動作でした。
二番目の方法を試した所、ログインからログアウトをするとユーザ名は表示されていましたがブラウザを再表示するとクリアーされていました。(実際は、消えている)
最後に、三番目の方法を試した所、ログイン画面は何も(白く)表示されてしまいログインができませんでした。
という結果でしたので、一番目の改造が最適のようです。Moodleでは、一般的ではない動作なのかもしれない質問に対応をして頂きまして本当に、助かりました。
又、その他の事で質問をさせて頂くかも知れませんがよろしくお願いします。ありがとうこざいます。
良かったですね.しかし,2番目と追加の修正はダメでしたか.やはり検証なしはいけなかったですね(1例目は試しました).
でも冷静に考えてみると,一例目の改造も,
if (empty($frm->username) && $authsequence[0] != 'shibboleth') { // See MDL-5184
// $frm->username = get_moodle_cookie() === 'nobody' ? '' : get_moodle_cookie();
$frm->username = '';
$frm->password = "";
}
これだけで良かったですね^^;
Shirai 様、返信が遅くなって申し訳有りませんでした。
この改造だとシンプルで良いですね。こちらの改造方法に、変更したいと思います。ありがとうこざいます。
で、ちなみに私もテストをして気づいたのですがログインを強制にしていない設定だとフロントページが表示された時、ログインのブロックにユーザ名が消えない事に気づきました。調べた所、ここを改造すれば良いかなと思うのですがご助言を頂けると助かります。
blocks/login/block_login.phpの49行目あたり(Moodle1.9.1+)にそのコードです。
if (!isloggedin() or isguestuser()) { // Show the block
$this->content->text .= "\n".'<form class="loginform" id="login" method="post" action="'.$wwwroot.'/login/index.php">';
$this->content->text .= '<div class="c1 fld username"><label for="login_username">'.get_string('username').'</label>';
// $this->content->text .= '<input type="text" name="username" id="login_username" value="'.s($username).'" /></div>';
$this->content->text .= '<input type="text" name="username" id="login_username" value="" /></div>';
テストをした所、問題なさそうでしたが正直、自信が無くて見当違いの改造でなければと...
認証プラグインとして,Shibbolethを(使っていなくても)追加すると,$CFG->nolastloggedinが強制的にtrueに設定されるため,Moodleによるログイン画面のユーザ名の自動入力の機能は働かなくなりますね.
auth/shibboleth/auth.phpの182行目に,
function loginpage_hook() {
global $SESSION, $CFG;// Prevent username from being shown on login page after logout
$CFG->nolastloggedin = true;return;
}
こうあります.うーん.一律これですと少々不便.
この$CFG->nolastloggedin = true; をコメントアウトすれば正常に機能することを確認しました.目的はセキュリティだとは思うのですが,少々,乱暴な解決方法ですね.
Shibboleth認証を本格的に使うようになったらデバッグできるのですけれども,まだ少し先のことです.