gpt4 book ai didi

ruby-on-rails - 在 before_filter 上使用 Rails 和 Omniauth 重定向循环

转载 作者:行者123 更新时间:2023-11-30 05:27:46 25 4
gpt4 key购买 nike

我目前正在开发一个 Facebook 应用程序,该应用程序要求用户先登录才能访问该应用程序。

我在 application_controller 上有一个 before_filter 来检查用户是否已登录,如果没有则将他们重定向到正确的登录路径。

这是到目前为止的代码:

Application Controller

before_filter :check_sign_in

def check_sign_in
unless user_signed_in?
redirect_to signin_path
end

private
def current_user
begin
@current_user ||= User.find(session[:user_id]) if session[:user_id]
rescue Mongoid::Errors::DocumentNotFound
nil
end
end

def user_signed_in?
return true if current_user
end

我有我的 routes.rb 我有以下 signin_path

match '/signin' => 'sessions#new', :as => :signin

我的sessions#new 操作如下所示

def new
redirect_to '/auth/facebook'
end

不过手头的问题是我收到了一个重定向循环错误,其内容如下所示

This webpage has a redirect loop
The webpage at http://localhost:3000/signin has resulted in too many redirects. Clearing your cookies for this site or allowing third-party cookies may fix the problem. If not, it is possibly a server configuration issue and not a problem with your computer.

这似乎更有可能,因为登录到 facebook 的过程也有一个回调,我怀疑这是导致循环的原因。是否有更好的方法来确保用户登录或其他方法来实现我的想法?

我目前正在使用 rails 3.1.3,
ruby 1.9.3,
omn​​iauth-facebook 1.2.0,
omn​​iauth 1.0.2

最佳答案

在您的 SessionsController 中,您需要添加 skip_before_filter :check_sign_in, :only => [:new, :create]

在 ApplicationController 中无条件地添加 before_filter 意味着从它继承的每个 Controller 中的每个 Action 也将被重定向,因此实际的 session Action 将永远不会被调用。

您可能还需要跳过 OmniAuthCallbackController 中的 before_filter,具体取决于它是否也继承自 ApplicationController。

关于ruby-on-rails - 在 before_filter 上使用 Rails 和 Omniauth 重定向循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8965877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com