2011-02-24 4 views
15

안정 인증은 authenticate_with_http_basic을 사용하지만 인터넷 검색은 설명이없는 많은 페이지를 찾을 수 있습니다. 공식 http://api.rubyonrails.org/에, 그것은 또한 다시 설명을, 아무 코멘트도, 아무 spec도다는 것을 제외하고 찾아 낼 수있다.Ruby on Rails에서 authenticate_with_http_basic의 기능은 무엇입니까?

무엇이 있나요? 그것은 login_namepassword HTTP 요청에서 사용할 수있을 것 같습니다 그리고 그들은 테이블에 login_nameencrypted_password 비교할 수 있습니다 ...하지만 그 경우에는 왜 한 줄 설명도없는거야? ?

답변

18

이 방법을 사용하면 기본 http 인증 (작은 대화 상자가 사용자 이름과 암호를 묻는 팝업 형식)을 구현할 수 있습니다. 일반적으로 개발 사이트 또는 관리 영역에 대한 액세스를 제한하는 좋은 방법입니다. 예를 들어 :

class AdminController < ApplicationController 
    before_filter :authenticate 

    def authenticate 
    authenticate_or_request_with_http_basic('Administration') do |username, password| 
     username == 'admin' && password == 'password' 
    end 
    end 
end 

이 기능은 기본 HTTP 인증 사용자 이름과 암호에 대한 요청을 할 것 중 하나, 또는 입력 한 후 인증이 정확하면, 실제로 확인합니다. 즉,이 함수는 authenticate_with_http_basic을 호출하거나 request_http_basic_authentication을 호출합니다. 그것에 대해 더 자세히 읽고 더 많은 예제를보실 수 있습니다 here. 일반적으로 authenticate_with_http_basic 또는 request_http_basic_authentication을 호출하는 대신 authenticate_or_request_with_http_basic을 호출합니다. 왜냐하면 전자의 함수가 후자의 함수에 모두 적합하기 때문입니다.

P.S : authenticate_with_http_basic은 POST 변수를 사용하지 않고 헤더 정보를 사용하여 사용자 이름과 암호를 가져옵니다 (request.env [ 'HTTP_AUTHORIZATION']). 권한 부여 기능 here에 대한 자세한 정보를 볼 수 있습니다.

+0

는 POST 변수'username'과'password'에서'authenticate_with_http_basic' 추출물을 수행하고 그 그것 뿐이다 (명확하게하기 위해 레일 (5)에 대해 이야기)? 가장 기본적인 설명은 무엇입니까? –

+0

나는 이것을 내 게시물에도 추가했습니다. 간단히 말해 POST 변수를 사용하지 않고 요청 헤더의 request.env 데이터를 사용합니다. –

+0

HTTP 헤더의 사용자 이름과 비밀번호는 어떤 상황입니까? '/ session'과 post 변수에 대한 POST는 다음과 같습니다 :'authenticity_token = TrtiGrt8CcDl9DiVbZLA6Yi24g % 2FQ6qazMtOgwlJqpjc 3D & login = foo & password = 123123 & remember_me = 1 & commit = Log + in' 이렇게 POST 형태의 ('/ session/new' 또는'/ login') 나는 사용자가 일반적으로 POST 변수로 로그인했다고 생각 했습니까? –

3

언제 어디서나 읽을 수 있다면 시간을 절약 할 수있는 몇 가지 세부 정보가 있습니다.

나는 그것을 들먹입니다. authenticate_with_http_basic은 요청에서 basic-auth user/pass를 읽고 해당 정보가 요청에있을 때 내부 블록을 실행합니다. 클라이언트가 인증을 전송하지 않으면 nil을 반환합니다. 그렇지 않으면 블록이 평가할 대상을 반환합니다.

따라서 반환 값을 사용하여 request_http_basic_authentication을 수행할지, 금지 403을 반환할지 또는 콘텐츠를 렌더링 할지를 결정할 수 있습니다.

참고로, before_action 훅으로 등록 된 메소드에서 이것을 실행하는 경우 해당 메소드의 반환 값은 무시됩니다. 방법 rendered 또는 redirected 인 경우 작업이 실행되지 않습니다. 메서드가 render 또는 redirect이 아니면 액션이 실행됩니다.

HTH는

관련 문제