Rails를 통해 Basic 인증 + 전체 버전 가져오기

최근 레일즈가 제작한 애플리케이션에 베이직 인증을 도입한 것이 당시 노트였다.

원래 Basic 인증이 뭐예요?


Basic 인증은 서버와 통신할 때 사용자 이름과 비밀번호를 아는 사람이 아니면 그 사이트를 방문할 수 없는 기능을 말한다.

사진은 이런 느낌이에요.본 사람이 있을 것 같아서요.그럼 실시를 시작하겠습니다.

전제 조건

  • 어플리케이션 서버가 Uniccorn
  • 을 사용하는 것으로 가정합니다.
  • 웹 서버가 Nginx
  • 를 사용하는 것으로 가정합니다.
  • 클라우드 사용 AWS
  • 자동 디버깅을 위해 Capistrano를 사용하는 경우
  • application_controller에 쓰는 방법


    모든 컨트롤러로 Basic 인증을 하고 싶으므로 lication 적용controller.rb에 코드 쓰기!
    Rails에는 Basic 인증 방법이 있습니다.
    그게 auuthenticate예요.or_request_with_http_basic
    바로!
    app/controllers/application_controller.rb
    
    class ApplicationController < ActionController::Base
      before_action :basic_auth
      protect_from_forgery with: :exception
    
      private
    
      def basic_auth
        authenticate_or_request_with_http_basic do |username, password|
          username == ENV["BASIC_AUTH_USER"] && password == ENV["BASIC_AUTH_PASSWORD"]
        end
      end
    end
    
    
    authenticate_or_request_with_http_Basic은 Rails로 Basic 인증을 간단하게 구현하는 방법입니다!
    username == ENV["BASIC_AUTH_USER"]
    &&
    password == ENV["BASIC_AUTH_PASSWORD"]
    환경 변수입니다.username = "kenji"또는 코드에 직접 쓰면 Giithub에서 오류가 발생하여 업로드할 때 불법으로 이용됩니다!조심하세요!

    종착역에 있습니다.bash_프로필에 환경 변수를 쓰다


    가령 이번에는 본격적인 환경에서 진행해야 한다면!
    ssh 액세스 서버에 연결하세요!
    $ vim ~/.bash_profile
    
     ###「i」を押してインサートモードにいく
    
    export BASIC_AUTH_USER='kenji'
    export BASIC_AUTH_PASSWORD='1234'
    
     ###書き終えたらescキーを押して、「:wq」を押して保存して終了
    
    $ source ~/.bash_profile
     ###最後に.bash_profileを読み込んで環境変数を反映させる
    
    

    공식 환경에서만 Basic 인증


    config/deploy의production입니다.rb에 계속 추기하다.
    config/deploy/production.rb
    # server "db.example.com", user: "deploy", roles: %w{db}
    server "(御自身のEC2のIPアドレス)", user: "ec2-user", roles: %w{app db web}
    
    set :rails_env, "production"
    set :unicorn_rack_env, "production"
    
    # role-based syntax
    # ==================
    
    
    이렇게 유니콘은 현재의 환경을 정식 환경으로 인식했다.

    더욱controller의 기술 변경


    app/controllers/application_controller.rb
    
    class ApplicationController < ActionController::Base
      before_action :basic_auth, if: :production? 
      protect_from_forgery with: :exception
    
      private
    
      def production?
        Rails.env.production?
      end
    
      def basic_auth
        authenticate_or_request_with_http_basic do |username, password|
          username == ENV["BASIC_AUTH_USER"] && password == ENV["BASIC_AUTH_PASSWORD"]
        end
      end
    end
    
    
    추가
    before_action :basic_auth, if: :production?
    def production?
    Rails.env.production?
    end
    두 개밖에 없어요.
    production?메소드 Rails로env.production?를 정의하므로 공식 환경인지 로컬 환경인지 알 수 있습니다.

    마지막으로 디버깅 확인 동작을 진행합니다.

    
    $ bundle exec cap production deploy unicorn:stop
    
    
    $ bundle exec cap production deploy unicorn:start
    
    
    "음, 잘 안되지만..."상황이 발생하면 AWS의 콘솔에서 EC2를 다시 시작하세요!그리고nginx, MySQL, Uniccorn을 수동으로 다시 시작하십시오.그럼 잘 될 거야.

    수고하셨습니다!


    Basic 인증을 잘 하셨을 거예요!

    좋은 웹페이지 즐겨찾기