这个网页有一个重定向循环 - Devise,Rails

时间:2014-10-20 19:25:09

标签: ruby-on-rails authentication redirect devise

我在登录后尝试将用户重定向到请求的路径时出现此错误。

假设当他点击受保护的“我的帐户设置”链接时,他会被重定向到登录页面进行身份验证,如果身份验证成功,则会返回“我的帐户设置”页面。

通过它创建一个循环错误,这是由于我理解他正在被重定向从登录到需要登录的页面而不是页面(因为他已经是身份验证)......

现在我尝试通过执行以下操作来解决此问题:

ApplicationController

before_action :store_location

def store_location
  # store last url - this is needed for post-login redirect to whatever the user last visited.
  return unless request.get? 
  if (request.path != "/users/sign_in" &&
      request.path != "/users/sign_up" &&
      request.path != "/users/password/new" &&
      request.path != "/users/password/edit" &&
      request.path != "/users/confirmation" &&
      request.path != "/users/sign_out" &&
      !request.xhr?) # don't store ajax calls
    session[:previous_url] = request.fullpath 
  end
end


def after_sign_in_path_for(resource)
  session.delete(:previous_url)  || root_path
end

def logged_in?
  current_user ? true : false
end

PagesController

before_action :authenticate_user!, only: [:show], :unless => :logged_in?

这样,在成功验证后,我们跳过:authenticate_user!直接去渲染节目视图(而不是进入登录/重定向逻辑...)

不幸的是,它没有解决问题。

你看到我在这里失踪的东西吗?

1 个答案:

答案 0 :(得分:0)

尝试添加

session["user_return_to"] = request.fullpath 

到“!request.xhr?)”之后的store_location方法

<强>更换

session[:previous_url] = request.fullpath