Как защитить определенную страницу от просмотра без входа в систему в ruby ​​на рельсах - PullRequest
0 голосов
/ 18 мая 2011

Я хочу защитить определенную страницу в контроллере от доступа, только если пользователь вошел в систему, это страница add.html для добавления вопросов, страница index.html используется для отображения заданных вопросов, но я хочуоставаться публичным.Как сделать так, чтобы, когда кто-то нажимает на кнопку, задает вопрос из индекса, он проверяет наличие входа в систему и, если он не вошел в систему, имеет флэш-уведомление, в котором говорится, что вы должны одновременно войти и перенаправить на страницу входа.

Новая ошибкастраница указателя:

NoMethodError in Car#index

Showing app/views/car/index.html.erb where line #3 raised:

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each
Extracted source (around line #3):

1: <h2>Current List of Open Questions</h2>
2: <dl>
3: <% @car.each do |car| %>
4:   <dd>
5:     <%= car.name %><br />
6:     <%= car.description %><br />

Ответы [ 3 ]

1 голос
/ 18 мая 2011

Если вы уже используете систему входа в систему, вы можете установить фильтр до, чтобы аутентифицировать только те действия, которые вы желаете.

before_filter :authenticate, :except => :index
0 голосов
/ 18 мая 2011

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

В контроллере приложения (если вы сохраняете идентификатор текущего вошедшего в систему пользователя в сеансе [: user_id]):

class ApplicationController < ActionController::Base
  protected
  def ensure_login
    if session[:user_id].blank?
      flash[:notice] = 'You must be logged in to use this part of the site.'
      begin
        redirect_to :back
      rescue
        redirect_to '/'
      end
      return false
    end
  end
end

и затем в контроллере, где вы ограничиваете доступ:

class QuestionsController < ApplicationController
  before_filter :ensure_login, :only => [ :add ]
end
0 голосов
/ 18 мая 2011

Вместо того, чтобы писать код входа в систему самостоятельно, вы должны рассмотреть такие гемы, как Devise, Authlogic и Restful аутентификация - (перечислены в порядке убывания того, что вы должны сделать, чтобы все заработало)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...