Защита контента с помощью AuthLogic - PullRequest
4 голосов
/ 05 августа 2009

Я знаю, что это звучит как очень, очень простой вариант использования, и я надеюсь, что это так, но я клянусь, я посмотрел повсюду и не нашел ни одного упоминания - даже не самый лучший способ - сделать это.

Я новичок в Ruby, Rails и во всем остальном (что может объяснить лот ). Фиктивное приложение, которое я использую в качестве учебного пособия, требует аутентификации, чтобы сделать что-то значимое, поэтому я решил начать с решения этой проблемы. Я установил гем AuthLogic, и он прекрасно работает в той степени, которая описана во вступительной документации и Railscast, но теперь, когда я могу зарегистрироваться, войти и выйти из системы ... Мне нужно с этим что-то сделать.

В качестве примера мне нужно создать страницу, где пользователи могут загружать изображения. Я планирую использовать ImagesController с методом действия upload, но я хочу, чтобы он был доступен только зарегистрированным пользователям. Я предполагаю, что в каждое ограниченное действие я мог бы добавить код для перенаправления, если нет current_user, но это кажется действительно многословным.

Есть ли лучший способ сделать это, который позволяет мне определять или идентифицировать ограниченные области и обрабатывать проверку подлинности в одном месте?

Ответы [ 4 ]

6 голосов
/ 05 августа 2009

Убедитесь, что у вас есть эти методы в вашем application_controller.rb

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

Тогда в ваших контроллерах вы можете использовать фильтр before для ограничения доступа к страницам

class ExamplesController < ActionController::Base
  before_filter :require_user, :only => :private

  def public
    // some public stuff
  end

  def private
    // some protected stuff
  end
end
0 голосов
/ 27 марта 2010

У вас есть весь код Gist, доступный здесь, на Github. Это примерно 360 строк кода. Включая ступеней.

http://gist.github.com/96556.txt

0 голосов
/ 05 августа 2009

Вам нужно будет использовать before_filter на своей странице, чтобы его могли видеть только зарегистрированные пользователи. Если вы хотите получить пример использования Authlogic (включая материал before_filter), вы можете проверить Authlogic Exmaple из Github .

0 голосов
/ 05 августа 2009

before_filter ваш друг здесь. Вы определяете функцию require_authentication, которая возвращает false, если нет действительного сеанса, а затем настраиваете его как before_filter в контроллерах и действиях по своему вкусу.

Посмотрите на приложение Authlogic Sample, которое определяет некоторые фильтры в application_controller.rb , а затем использует его там, где это необходимо (например, здесь , где вы должны быть зарегистрированы чтобы уничтожить вашу учетную запись, и не вошли в систему, чтобы создать новую.

...