#Basic認証とは
Basic認証とは、HTTP通信の規格に備え付けられているユーザー認証の仕組み
解決したいこと
アプリケーションにBasic承認を導入する
正しいパスワードを設定し入力しているはずだが、ログインできない
(入力フォームが表示され入力もできる)
以下動作動画
https://gyazo.com/272b9a414067dc55c898907512c02b10
*ターミナル上では401のエラーが起きている
設定の流れ
class ApplicationController < ActionController::Base
before_action :basic_auth
private
def basic_auth
authenticate_or_request_with_http_basic do |username, password|
username == 'sample' && password == '1234'
end
end
end
秘匿情報は公開できないので、環境変数を設定する!
username == ENV["BASIC_AUTH_USER"] && password == ENV["BASIC_AUTH_PASSWORD"]
#環境変数を設定
$ vim ~/.bash_profile
[I]
export BASIC_AUTH_USER='sample'
export BASIC_AUTH_PASSWORD='1234'
$ source ~/.bash_profile
正しいパスワードを設定し入力しているはずだが、ログインできない
(入力フォームが表示され入力もできる)
*401エラー
検証したこと
1.コントローラに直接ユーザー名とパスワードを入力すると正しくログインできる
2.Rails consoleで確認すると正しく値を取得できている?
[1] pry(main)> ENV["BASIC_AUTH_USER"]
=> ”sample”
[2] pry(main)> ENV['BASIC_AUTH_PASSWORD']
=> "1234"
3./etc/environment、vim ~/.bashrcに記載し直しても解決しなかった
4. binding.pryでは以下のように表示される
6: def basic_auth
7:
8: authenticate_or_request_with_http_basic do |username, password|
=> 9: binding.pry
10: username == ENV["BASIC_AUTH_USER"] && password == ENV["BASIC_AUTH_PASSWORD"]
11:
12: end
13: end
[1] pry(#<ItemsController>)> username
=> "sample”
[2] pry(#<ItemsController>)> ENV["BASIC_AUTH_USER"]
=> nil
#仮説
→環境変数を設定しているが、コントローラで正しい値を取得できていないかもしれない
##解決の糸口
rails cでは値が取得できているが、rails sをbinding.pryで止めて値を確認すると『nil』
この二つの違いは何だろうか??
あっ、そういえばターミナルではそれぞれ別のタブを開いて作業している!
もしかすると、、、片方のタブで書き込んだ環境変数は、同時に立ち上げているもう一つのタブには反映されないのかもしれない!!
rails sしているタブで、$env を入力し中身を確認すると、、、、確かに別タブで設定したつもりのBASIC認証の環境変数がない!!!
⇨改めてrails sしていたタブで$source ~/.bash_profile すると、、、、
うまくいった!!!!!!!!!
学んだこと
basic承認に限らず、
ターミナルの環境変数はタブを立ち上げた瞬間に一度だけ読み込まれる。
もし、他のタブで環境変数などの設定をいじったら、関連するタブ全てに更新をかけること!!!以上