Basic 인증 도입시, Heroku상에서 로그인을 할 수 없다.



배경



Basic 인증을 도입하여 필요 최소한의 보안을 마련하고 싶다.
과거에 두 번 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에 올리면 정상적으로 로그인할 수 있었습니다.

좋은 웹페이지 즐겨찾기