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

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

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

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

Ruby on Rails

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

Q&A

1回答

439閲覧

RailsのBasic認証をかけたいのですがどなたか教えていただけないでしょうか?

koume

総合スコア458

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2017/11/08 15:07

Rails5.1.3でWebアプリケーション制作の勉強をしています。

以前「ページに個別にアクセスするにはどうすればいいのでしょうか?」と質問させていただいたときに

URLはhttp://www.123abc.com/staffみたいな形にして、ページにBasic認証をかければいいと思います。
また、ページからの遷移はなしで、直接URLを打ち込む形にすればいいかと思います。
basic認証をかけない場合、誰でも侵入されてしまうので、かけるべきだと思います。

と教えていただきましたので

初耳なのですがBasic認証なるものをかけようとしています。
Basic認証で検索して調べてもあやふやなので教えていただけないでしょうか?
ググって調べて真似してみたコードが以下になります。

class Staff::TopController < Staff::Base  before_filter :basic skip_before_action :authorize def index if current_staff_member render action: 'dashboard' else render action: 'index' end end  private def basic authenticate_or_request_with_http_basic do |user, pass| user == 'user' && pass == 'pass' end end end

上記のコードで |user, pass|の記述と user == 'user' && pass == 'pass'がよくわかりません。
(パスワードは Gemパッケージbcryptが提供するハッシュ関数を用いてパスワードを変換して保存されています。)
意味もわからずただ真似をして記述してみましたが、これでいいのかわからないので
どなたか教えていただけないでしょうか?宜しくお願いします。

password と nickname でBasic認証をかけたいのですが記述方法がわかりません。

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

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

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

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

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

guest

回答1

0

もっと簡単に実現できるので、以下の方法を試してみてください。

ruby

1class Staff::TopController < Staff::Base 2 http_basic_authenticate_with :name = 'hogeuser', :password = '12345678' 3 skip_before_action :authorize 4 5 def index 6 if current_staff_member 7 render action: 'dashboard' 8 else 9 render action: 'index' 10 end 11 end 12end

で実現できるかと思います。

そこでさらに開発時にはBasic認証をかけず、本番環境でのみBasic認証をかけたい場合は以下のようにします。

ruby

1class Staff::TopController < Staff::Base 2 http_basic_authenticate_with :name = 'hogeuser', :password = '12345678' if Rails.env == "production" 3 skip_before_action :authorize 4 5 def index 6 if current_staff_member 7 render action: 'dashboard' 8 else 9 render action: 'index' 10 end 11 end 12end

namepasswordがこれではソースコード上に残ってしまうので、そちらが嫌な場合は環境変数に入れるように以下のように変更するといいです。

ruby

1class Staff::TopController < Staff::Base 2 http_basic_authenticate_with :name => ENV['BASIC_USERNAME'], :password => ENV['BASIC_PASSWORD'] if Rails.env == "production" 3 skip_before_action :authorize 4 5 def index 6 if current_staff_member 7 render action: 'dashboard' 8 else 9 render action: 'index' 10 end 11 end 12end

投稿2017/11/09 00:43

kenny_sayama

総合スコア1036

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

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

maisumakun

2017/11/09 01:10

この方法だと、bcryptで暗号化されたパスワードは(復元不能なので)指定できないのではないでしょうか。
kenny_sayama

2017/11/09 02:34

bcryptの部分を見逃していました。 bcrypt使わなくても出来るかと思うのですが、、、
koume

2017/11/10 01:06

回答ありがとうございます。bcryptで暗号化したパスワードで一般ユーザーが ログインします。(ユーザー専用ページ)。管理者専用ページに管理者以外が アクセスできないようにしたいのでBasic認証をかけたいのですがbcryptを 使っているとBasic認証はかけれないということなのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問