質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

2652閲覧

ベーシック認証のログアウト機能がローカル環境で動かない

hiro..

総合スコア79

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

1クリップ

投稿2020/10/15 05:39

編集2020/10/15 07:40

お世話になっております。

ワードプレスの特定のページのみでベーシック認証をかけ、
ログアウトボタンを押したらログアウトする、という機能を実装しています。

テストとしてサーバー(mixhost)にあげている適当なサイトで実装してみたらちゃんと機能したのですが、
ローカルで実装してみたところ、ログアウト機能がうまくいきません。

ログアウト用関数の呼び出しまではできているようなのですが、
ajaxがうまくいってない?のか、401が返ってこない状態です。
コンソールでは特にエラーは出ていません。

特定ページにベーシック認証をかけるのには、こちらのページを参考にしました。
ログアウトはいろんなサイトを見たので、忘れてしまいました。。

//head内に以下を追記 <?php if(!is_home()): if(is_page('member-only')): $userArray = array("admin" => "password"); basic_auth($userArray); endif; endif; ?>

jQuery

1jQuery(function ($) { 2 $('#logout-auth').on('click', function () { 3 logoutAuth(); 4 //return false; 5 }); 6}); 7 8 9function logoutAuth() { 10 jQuery.ajax({ 11 type: "GET", 12 url: "/member-only", 13 dataType: 'json', 14 async: true, 15 username: "exist", 16 password: "stupidpassword", 17 // data: '{ "comment" }' 18 }) 19 20 .done(function () { 21 // alert('Error!') 22 window.location = "/"; 23 }) 24 .fail(function () { 25 window.location = "/member-only"; 26 }); 27} 28
//member-only.php <p id="logout-auth" class="btn-download logout" href="">ログアウト</p>
//functions.php function basic_auth($auth_list,$realm="Restricted Area"){ if (isset($_SERVER['PHP_AUTH_USER']) and isset($auth_list[$_SERVER['PHP_AUTH_USER']])){ if ($auth_list[$_SERVER['PHP_AUTH_USER']] == $_SERVER['PHP_AUTH_PW']){ return $_SERVER['PHP_AUTH_USER']; } } header('WWW-Authenticate: Basic realm="'.$realm.'"'); header('HTTP/1.0 401 Unauthorized'); header('Content-type: text/html; charset='.mb_internal_encoding()); die(home_redirect()); } //ベーシック認証キャンセル function home_redirect(){ echo "<script type=\"text/javascript\">alert(\"ログインがキャンセルされました\");</script>"; echo "<script type=\"text/javascript\"> setTimeout(function(){ window.location.href = \"/\"; }, 0*1000); </script>"; }

ローカルで動かすにはローカル用の書き方があるのでしょうか。
どうしたらログアウトできるようになるのか、ご教示いただけましたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/10/15 06:32

基本認証でログアウトができるんでしたっけ? サーバーから 401 を返すという方法があるそうですが、ブラウザ依存らしいです。余計な話でしたら失礼しました。
hiro..

2020/10/15 07:09

コメントありがとうございます。おっしゃる様にログアウト機能は無いのですが、401を返して強制的にログアウトさせる方法ということで、今回実装してみたのです。 今回、サーバーにあげてうまくいったのも、ローカルでうまくいかなかったのもどちらもchromeになります。 ブラウザ依存なのですね。。それは知りませんでした・・・
guest

回答1

0

自己解決

まだ全面解決はしていないのですが、以下の修正でログアウトができるようになりました。

jQuery

1 jQuery.ajax({ 2 type: "GET", 3 url: "/member-only", // ここを 4 5  略 6 })

jQuery

1 jQuery.ajax({ 2 type: "GET", 3 url: "/member-only/", // こう 4 5  略 6 })

URLの最後に/を付与しただけす。サーバーにあげてテストした方は/が無くてもログアウトしましたが、
ローカル検証ではなぜか/がないとログアウトできませんでした。。

ログアウトできるようになったものの、ログアウトボタンを押したときに認証を求めるダイアログが表示されてしまいます。
これも、サーバー上でテストした時には表示されませんでした。

ダイアログを表示させないようにしたいのですが、質問の内容がタイトルと変わってしまうのでまた改めてトピを立てさせていただこうと思います。
コメントいただいた方ありがとうございました!

投稿2020/10/15 11:15

hiro..

総合スコア79

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問