背景
Basic認証を導入して、必要最低限のセキュリティを設けたい。
過去に2度Basic認証の練習として導入したことがあり、その時はスムーズにできたため、今回も導入したいと考えた。
しかし、実際に導入してみると、ローカル環境では正常に動作しログインできるものの、本番環境では正しいユーザー名とパスワードでも弾かれてしまった。
行ったこと
まず、現状を確認するため、もう一度git push heroku masterでどう表示されるかを確認した。
% git push heroku master
Everything up-to-date
全て最新の状態であることから環境変数を設定する前に、github上でコミットしてしまったり、git push heroku masterなどのコマンドを実行したと仮説を立てた。空のコミットをしてから、再度git push heroku masterをする必要があると考え、実行した。
% git commit --allow-empty -m "コミット名"
% git push heroku master
######しかし、ログインできませんでした。
#原因
application_controller.rbに記述している、private内の記述と、heroku上に設けた環境変数の名前が一致していなかった。
def basic_auth
authenticate_or_request_with_http_basic do |username, password|
username == ENV["BASIC_AUTH_USER"] && password == ENV["BASIC_AUTH_PASSWORD"]
end
end
% heroku config
=== アプリ名 Config Vars
BASIC_AUTH_PASSWORD: *****
BASIC_AUTH_USERNAME: *****
#対処法
双方の環境変数が紐付くように、同じ名前に変えてあげれば良い。
今回の場合はUSERNAMEかUSERに統一させてHerokuに上げれば、正常にログインできました。