Rails: базовая аутентификация с Authlogic

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

Я знаю, как выполнить базовую аутентификацию HTTP Authenticate_or_request_with_http_basic и before_filter, но я хотел бы здесь от другого, как реализовать это с помощью плагина Authlogic.

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

person xpepermint    schedule 18.02.2010    source источник


Ответы (2)


Вот отличный скринкаст, который шаг за шагом объясняет, как использовать 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]
person mdemmitt    schedule 18.02.2010
comment
Я сделал это, но это не для протокола REST. Я пытаюсь создать обычную HTTP-аутентификацию, при которой клиент должен отправлять заголовок аутентификации. - person xpepermint; 18.02.2010
comment
Этот код на самом деле не использует HTTP Basic, но решение ниже использует. - person Clinton; 10.03.2010

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

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

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

person arfon    schedule 24.02.2010
comment
Это то, что мы искали. Спасибо! - person Clinton; 10.03.2010
comment
Ты спас мне день! Спасибо! - person sgonzalez; 04.06.2012