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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

2回答

976閲覧

rails アクション発行前にpasswordを入力させ、アクセス制限をかけたい。

kinoko8800

総合スコア16

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2021/07/14 04:04

編集2021/07/14 04:06

現在、勉強のためブログを開発してします。
その中で、特定の記事へアクセス制限機能を実現したいと思っており、少々つまずいてしまったので質問いたしました。


期待動作
タイトルの通りですが、アクション発行前にpasswordでアクセス制限をかけたいと思っております。
よくあるbasic認証のnameがないような形で実現したい。
アクセス制限をしたいブログの記事毎にpasswordを付与する予定です(aticlesテーブルに保存する)。


railsが用意している簡単にbasic認証の仕組みを導入できるauthenticate_or_request_with_http_basicなどを使って実現できないかと
思いましたが、 passwordだけでなくnameも必須なので今回の期待する動作には合わないようです。

どうすればpasswrodだけでbasic認証ような形式でアクセス制限をかけることできるでしょうか?
ご回答よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

技術的には名前が空欄でもBasic認証を通すことは可能かもしれませんが、ブラウザが名前とパスワードの入ったダイアログを表示してしまいます。

「パスワードだけ入力させたい」のであれば、自前でフォームを描画するような別な手段が妥当です。

投稿2021/07/14 04:56

maisumakun

総合スコア145208

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

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

kinoko8800

2021/07/14 06:31

ご回答ありがとうございます。なるほどです。自作の方向で行きたいと思います。 制限ありの記事にアクセスがあったときにshowアクションの前に自作ダイアログを表示して、入力されたパスワードを照合して、合致していればshowアクションに流すみたい流れだと思うのですが、この処理の流れをコントローラ内でどうやって実現するかあんまりピンとこないですね、、 before_actionでメソッドを一つかましてあげれば実現できそうですかね?
kinoko8800

2021/07/14 06:32

追加で質問申し訳ありません。
maisumakun

2021/07/14 06:36

> before_actionでメソッドを一つかましてあげれば実現できそうですかね? そんな簡単な話ではありません。「本体の表示を行うアクション」以外に、「パスワード入力フォームの提示を行うアクション」「パスワードを受け付けて認証処理を行うアクション」が必要となります(認証自体が、複数のHTTPリクエストを繰り返す形となります)。
kinoko8800

2021/07/14 06:54

そうですよね、、ちょっと考えが甘かったですね、ありがとうございます????‍♂️ アクセス制限付きの記事についてのみ、複数のHTTPリクエストをやりとりする形で行きたいのですが、この場合はrouteを分割して管理したほうが楽ですか?
kinoko8800

2021/07/14 07:54 編集

制限がない記事へのアクセス時の処理をあまりいじりたくないのと、routeを分けた方が処理を分岐させなくていいので分かりやすいかなと思いまして。よくわからないこと言ってたらすみません。 ちなみにですが、制限つきの記事の場合は、アプリ側にリンクは貼らず、URLを共有する形にしたいと思っております。
guest

0

before_action に authenticate というのがあります。
それを参考にしてはどうでしょう。
before_action :need_password とでもして、特定のcontrollerの特定のactionに対して設定する。
そのなかで、該当するコンテンツではなかったら trueで終わり、該当だったらpassword入力画面をだす。

投稿2021/07/14 23:04

winterboum

総合スコア23416

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

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

kinoko8800

2021/07/15 12:54

def authenticate(request, realm, &password_procedure) request.authorization && validate_digest_response(request, realm, &password_procedure) end やはり使い方がよくわからないです、、、 調べ方が悪いのか、使用例も出てこない、、泣
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問