Basic認証導入時、Heroku上でログインができない。


背景

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上に設けた環境変数の名前が一致していなかった。

app/controllers/application_controller.rb
  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に上げれば、正常にログインできました。