Запретить пользователям доступ к страницам в приложении Rails, если они не вошли в систему - PullRequest
0 голосов
/ 03 января 2019

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

Контроллер приложения:

class ApplicationController < ActionController::Base
   protect_from_forgery
   include SessionsHelper
   before_action :logged_in_user
end

Помощник сеанса:

module SessionsHelper

  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end

  def logged_in?
      !current_user.nil?
  end

  # Confirms a logged-in user.
  def logged_in_user
     unless logged_in?
        flash[:danger] = "Please log in."
        redirect_to 'name of login page'
     end
  end

end

В настоящее время страница просто перезагружается снова и снова (потому что пользователь не вошел в систему) и время ожидания страницы истекает. Что я делаю не так?

1 Ответ

0 голосов
/ 03 января 2019

когда вы используете before_action в ApplicationController, указанное действие будет выполняться перед любым действием во всех контроллерах, которые наследуют ApplicationController, если вы не пропустите его по skip_before_action.

В вашем случае вам нужнолибо применить before_action в ApplicationController и использовать skip_before_action до действия login, например, в SessionsController, либо вы можете использовать before_action во всех других контроллерах вместо ApplicationController, чтобы указать, когда вам нужноих запускать.

class SessionsController
  skip_before_action :logged_in_user, only: :login

  def login
  end
end

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

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