Я пишу приложение Rails, у которого есть root_path для входа в систему и путь к профилю, к которому пользователи должны быть перенаправлены после входа в систему или если они уже вошли в систему и посещают домашнюю страницу. Я также хочу, чтобы пользователи, которые не вошли в систему, всегда были перенаправлены на страницу входа в систему, поэтому я настроил файл before_filter, чтобы попытаться сделать это. К сожалению, он ничего не понимает. Может ли кто-нибудь объяснить, что я делаю неправильно?Rails before_filter не перенаправляет
Контроллер Применение
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery
before_filter :require_login
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
def require_login
unless current_user
redirect_to root_url
end
end
helper_method :current_user, :require_login
end
Сессии контроллера
class SessionsController < ApplicationController
skip_before_filter :require_login
def index
if current_user
redirect_to profile_path
end
end
def create
user = User.from_omniauth(env["omniauth.auth"])
puts(env["omniauth.auth"])
session[:user_id] = user.id
redirect_to profile_path
end
def show
end
def destroy
session[:user_id] = nil
redirect_to root_url
end
end
Маршруты
Fbapp::Application.routes.draw do
root to: "sessions#index"
match 'profile', to: 'sessions#show', as: 'profile', via: [:get, :post]
match "auth/:provider/callback", to: "sessions#create", via: [:get, :post]
match "auth/failure", to: redirect('/'), via: [:get, :post]
match 'signout', to: 'sessions#destroy', as: 'signout', via: [:get, :post]
resources :posts
Я добавил skip_before_filter: require_login, только: [: индекс: создать] на мой контроллер сессий и что, казалось, сделать трюк! –