2010-02-18 3 views
3

Authlogic을 사용 중이며 컨트롤러에 기본 HTTP 인증을 구현하여 인증이 필요한 작업을 정의 할 수 있습니다.레일 : Authlogic 기본 인증

나는 before_filter라는 기본 HTTP 인증 인 authenticate_or_request_with_http_basic을 수행하는 방법을 알고 있지만 여기서는 Authlogic 플러그인을 사용하여 구현하는 다른 방법부터 배우고 싶습니다.

class ItemsController < ApplicationController 
    before_filter :authenticate , :only => [:index, :create] 
    ... 
end 

답변

4

Here is a great screencast 설명하는 단계별, 방법 레일 프로젝트에 authlogic 사용할 수 있습니다.

일단 authlogic이 설정되면 Application Controller에서 다음과 같은 유용한 인증 관련 도우미 메소드를 정의하십시오.

def current_user_session 
    return @current_user_session if defined?(@current_user_session) 
    @current_user_session = UserSession.find 
end 

def current_user 
    return @current_user if defined?(@current_user) 
    @current_user = current_user_session && current_user_session.record 
end 

def require_user 
    unless current_user 
    store_location 
    flash[:notice] = "You must be logged in to access this page" 
    redirect_to new_user_session_url 
    return false 
    end 
end 

def require_no_user 
    if current_user 
    store_location 
    flash[:notice] = "You must be logged out to access this page" 
    redirect_to root_url 
    return false 
    end 
end 

그 방법이 정의되면, 당신은 사용자가 요구하는 작업을 지정할 수는 로그인 할 :

이 필터 방법을 정의합니다

before_filter :require_user, :only => [:new, :edit] 
+0

나는 이것을했는데 이것은 REST 프로토콜을위한 것이 아니다. 클라이언트가 인증 헤더를 보내야하는 기본 HTTP 인증을 작성하려고합니다. – xpepermint

+0

아야 .... 기본적으로 플러그인이 권한 부여를 처리한다는 것을 알았습니다. 험 ... – xpepermint

+2

이 코드는 실제로 HTTP Basic을 사용하지 않지만 아래의 해결책이 있습니다. – Judy

28

나는 다음과 같은 성공을 했어 in application_controller.rb

def require_http_auth_user 
    authenticate_or_request_with_http_basic do |username, password| 
    if user = User.find_by_login(username) 
     user.valid_password?(password) 
    else 
     false 
    end 
    end 
end 

컨트롤러에서 다음을 수행 할 수 있습니다.

before_filter : require_http_auth_user 

그런 다음 사용할 수 있습니다

http://username:[email protected] (즉, http 기본 인증)

희망이 도움이됩니다.

+0

이것은 우리가 찾고 있었던 것이다. 감사! – Judy

+0

당신은 나의 하루를 구했습니다! 감사! – sgonzalez