Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RESTful身份验证:尝试对基于cookie的身份验证执行简单重定向时遇到困难_Ruby On Rails_Cookies_Routing_Restful Authentication - Fatal编程技术网

Ruby on rails RESTful身份验证:尝试对基于cookie的身份验证执行简单重定向时遇到困难

Ruby on rails RESTful身份验证:尝试对基于cookie的身份验证执行简单重定向时遇到困难,ruby-on-rails,cookies,routing,restful-authentication,Ruby On Rails,Cookies,Routing,Restful Authentication,我有一个使用RESTful身份验证插件的RoR应用程序。一切都很好。我最近启用了基于cookie的身份验证,这也很好。问题是,我想在使用cookie对用户进行身份验证时更改默认登录页。我想让一个通过cookie身份验证的用户在从登录表单成功登录时重定向到他们重定向到的同一页面。它们始终指向原始请求URL。我在绞尽脑汁想这个问题,因为我认为我了解它是如何工作的,我所做的每一个改变似乎都没有影响 我怀疑这是一件简单的事情,但我显然错过了。如果您能提供任何反馈、指导或建议,我将不胜感激。您可以在成功登

我有一个使用RESTful身份验证插件的RoR应用程序。一切都很好。我最近启用了基于cookie的身份验证,这也很好。问题是,我想在使用cookie对用户进行身份验证时更改默认登录页。我想让一个通过cookie身份验证的用户在从登录表单成功登录时重定向到他们重定向到的同一页面。它们始终指向原始请求URL。我在绞尽脑汁想这个问题,因为我认为我了解它是如何工作的,我所做的每一个改变似乎都没有影响


我怀疑这是一件简单的事情,但我显然错过了。如果您能提供任何反馈、指导或建议,我将不胜感激。

您可以在成功登录后将此行添加到会话控制器:

redirect_to :controller => 'dashboard', :action => 'index'

我正在使用Bort,因此这可能不是
Restful\u身份验证
本身的一部分,但会话控制器中有一个
成功登录
方法,使用此Restful\u身份验证方法:

redirect_back_or_default( root_path )
authenticated\u system.rb中定义

    def redirect_back_or_default(default)
      redirect_to(session[:return_to] || default)
      session[:return_to] = nil
    end

我解决了这个问题,但在我看来有点难看。这就是我所做的

在cookie身份验证方法中,我设置了一个会话变量,指示使用了cookie登录方法

def login_from_cookie
  user = cookies[:auth_token] && User.find_by_remember_token(cookies[:auth_token])
  if user && user.remember_token?
    session[:cookie_login] = true   **# this is my addition**
    self.current_user = user
    handle_remember_cookie! false # freshen cookie token (keeping date)
    self.current_user
  end
end
然后在:
before\u filter set\u current\u user
中,我只需检查该变量,如果设置了,则重定向,确保将该变量设置为nil

def set_current_user
  Authorization.current_user = current_user
  if session[:cookie_login] 
    redirect_to :controller => :users, :action => :search
    session[:cookie_login] = false
  end
end

虽然不漂亮,但确实管用。我当然愿意接受任何关于如何清理的建议。

你不能把路线设置成这样吗

map.root :controller => :users, :action => :search

然后有一个before_过滤器来检查是否设置了某个“logged in”参数?只要用户通过cookie或普通方式登录,就需要设置此参数。然后,无论是cookie身份验证还是普通身份验证,它都将转到默认页面。可能我误解了这个问题。

Restful身份验证存储请求发出时试图访问的原始URL。您所要做的就是阻止它存储该值,或者在执行cookie身份验证时清除该值,然后用户将被重定向回默认页面

我可能会在authenticated_system.rb中这样做

 def login_from_cookie
  user = cookies[:auth_token] && User.find_by_remember_token(cookies[:auth_token])
  if user && user.remember_token?
    self.current_user = user
    session[:return_to] = nil # This clears out the return value so the user will get redirected to the default path
    handle_remember_cookie! false # freshen cookie token (keeping date)
    self.current_user
  end
end
is会话[:return_to]=nil

然后,只需确保您已在会话控制器中设置了默认路径,并且应该已全部设置好。会话控制器中的代码应如下所示:

redirect_back_or_default(the_path_you_want_to_send_them_to)

这会不会在每个请求上重定向?一个有趣的想法,但我支持Steven的问题-一旦用户登录,他们肯定会(在每个请求上)继续通过cookie登录,对吗?那么,这是否意味着它们会不断被重定向?你说它有效,这意味着我一定错过了什么-我误解了什么?我认为如果他们通过其他方法登录,海报不想重定向-只有在他们通过cookie登录的情况下。如果我错了,请纠正我。