【发布时间】:2014-03-18 06:59:57
【问题描述】:
我正在编写一个 Rails 应用程序,它有一个用于登录的 root_path 和一个配置文件路径,用户在登录后或者如果他们已经登录并访问主页时应该被重定向到该路径。我还希望未登录的用户始终被重定向到登录页面,因此我设置了一个 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
【问题讨论】:
标签: ruby-on-rails facebook oauth