2010-02-18 6 views
3

Я использую Authlogic, и я хотел бы реализовать базовую проверку подлинности HTTP в моем контроллере, чтобы я мог определить, какое действие требует аутентификации.Rails: базовая аутентификация с Authlogic

Я знаю, как выполнить базовую проверку подлинности HTTP authenticate_or_request_with_http_basic a before_filter, но я хотел бы здесь, из других, как реализовать его с помощью плагина 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

ow .... поскольку я выяснил, что плагин разрешает авторизацию по умолчанию. Hum ... – xpepermint

+2

Этот код фактически не использует HTTP Basic, но это решение ниже. – Judy

28

я имел успех со следующим:

Определите метод фильтра в 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 basic authentication)

Надеюсь, это поможет.

+0

Это то, что мы ищем. Благодаря! – Judy

+0

Ты спас мой день! Благодаря! – sgonzalez