【问题标题】:Rails before_filter not redirectingRails before_filter 不重定向
【发布时间】: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


    【解决方案1】:

    删除

     skip_before_filter :require_login
    

    来自SessionsController

    目前对于 SessionsController 中的所有操作,skip_before_filter 会从之前的过滤器链中删除 require_login 过滤器。因此,它永远不会被调用。

    顺便说一句,您可以使用 :only 和 :except 选项控制跳过过滤器的操作,就像您应用过滤器时一样。

    skip_before_filter : require_login, :only =&gt; [:method_name]

    skip_before_filter : require_login, :except =&gt; [:method_name]

    【讨论】:

    • 我将 skip_before_filter :require_login, only: [:index, :create] 添加到我的会话控制器中,这似乎可以解决问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    相关资源
    最近更新 更多