Ruby on rails 设计:验证用户后重定向到上一页?(循环中的request.referer结果)

Ruby on rails 设计:验证用户后重定向到上一页?(循环中的request.referer结果),ruby-on-rails,ruby-on-rails-3,redirect,routing,devise,Ruby On Rails,Ruby On Rails 3,Redirect,Routing,Devise,我正在使用Desive和Omniauth进行facebook身份验证。我试图在用户使用DesiveRegular或Omniauthfb登录后将用户重定向到上一页 当用户使用我的导航栏上的下拉登录时,但当用户尝试通过http://localhost:3000/users/sign_in url,request.referer返回一个无限循环错误 下面是顺序。问题出在d。 一个未登录的用户点击为任务投票。 b用户被重定向到用户/sign_-in url,因为before_过滤器:authentica

我正在使用Desive和Omniauth进行facebook身份验证。我试图在用户使用DesiveRegular或Omniauthfb登录后将用户重定向到上一页

当用户使用我的导航栏上的下拉登录时,但当用户尝试通过http://localhost:3000/users/sign_in url,request.referer返回一个无限循环错误

下面是顺序。问题出在d。 一个未登录的用户点击为任务投票。 b用户被重定向到用户/sign_-in url,因为before_过滤器:authenticate_User!在任务控制员办公室。 c用户通过键入用户名/pword或单击Facebook图标登录。 d用户应该被重定向回上一页,函数VoteUp已完成,但会给出路由错误 =>当我返回并刷新页面时,用户已登录,因此我知道这只是路由问题

任务控制器.rb

class MissionsController < ApplicationController
 before_filter :authenticate_user!, :except => [:show, :index] 

 def vote_for_mission
   @mission = Mission.find(params[:id])
   if @mission.voted_by?(current_user) 
     redirect_to request.referer, alert: 'You already voted on this mission.'
   else
     @mission.increment!(:karma)
     @mission.active = true
     @mission.real_author.increment!(:userpoints) unless @mission.real_author.blank?

     current_user.vote_for(@mission)
     redirect_to request.referer, notice: 'Your vote was successfully recorded.'
   end
 end
class ApplicationController < ActionController::Base

  protect_from_forgery                                                                                                                                    
  def after_sign_in_path_for(resource)
    sign_in_url = "http://localhost:3000/users/sign_in" || "http://onvard.com/users/sign_in" || 
    "http://www.onvard.com/users/sign_in" #url_for(:action => 'new', :controller => 'sessions', :only_path => false, :protocol => 'http')                                            
    if (request.referer == sign_in_url)                                                                                                                     
      env['omniauth.origin'] || request.env['omniauth.origin'] || stored_location_for(resource) || getting_started_path || root_path      
    else
      request.referer
    end
  end
ApplicationController.rb

class MissionsController < ApplicationController
 before_filter :authenticate_user!, :except => [:show, :index] 

 def vote_for_mission
   @mission = Mission.find(params[:id])
   if @mission.voted_by?(current_user) 
     redirect_to request.referer, alert: 'You already voted on this mission.'
   else
     @mission.increment!(:karma)
     @mission.active = true
     @mission.real_author.increment!(:userpoints) unless @mission.real_author.blank?

     current_user.vote_for(@mission)
     redirect_to request.referer, notice: 'Your vote was successfully recorded.'
   end
 end
class ApplicationController < ActionController::Base

  protect_from_forgery                                                                                                                                    
  def after_sign_in_path_for(resource)
    sign_in_url = "http://localhost:3000/users/sign_in" || "http://onvard.com/users/sign_in" || 
    "http://www.onvard.com/users/sign_in" #url_for(:action => 'new', :controller => 'sessions', :only_path => false, :protocol => 'http')                                            
    if (request.referer == sign_in_url)                                                                                                                     
      env['omniauth.origin'] || request.env['omniauth.origin'] || stored_location_for(resource) || getting_started_path || root_path      
    else
      request.referer
    end
  end
用户将被重定向到getting_started_路径,我将该路径设置为使我知道前面的选项不起作用。“else”是我用jquery创建的下拉式登录表单,它可以将用户重定向到上一页,但当我尝试将request.referer放在“request.referer==sign\u in\u url”中时,它会给我一个无限循环


即使用户通过“users/sign_-in”url登录,我如何将用户重定向到上一页???

您不能简单地重定向回上一页,因为sign_-in_url意味着只接受未登录的用户,并且在登录您的应用程序后,会将登录的用户发送回该页


如果您需要在登录后将用户重定向到特定位置,则应在重定向到登录页面之前存储用户尝试去的原始位置,然后在登录后,检查用户是否应在登录后转到其他位置,并将其重定向到该位置。

您不能简单地重定向回,因为sign_in_url只接受未登录的用户,并且在登录应用程序后,会将已登录的用户发送回该页面


如果您需要在登录后将用户重定向到特定位置,则应在重定向到登录页面之前存储用户尝试前往的原始位置,然后在登录后,检查用户登录后是否应前往其他位置,然后将他重定向到那里。

我要向使用Desive的子孙后代发表这个回复,他们也有同样的OP问题:你应该能够通过使用,这将返回用户在重定向到登录页面之前想要到达的路径。

我要向使用Desive并有相同OP问题的后代回复:您应该能够使用,这将返回用户在重定向到登录页面之前想要到达的路径。

我明白了-您是说重定向返回将用户发送回登录页面。那我有没有办法说回去两页?如果没有,我将如何存储原始位置?您可以将其存储在会话、cookie或任何您想要的内容中。然后,您只需检查该存储是否有内容,如果有,请重定向到该存储。我尝试将其存储在会话[:user\u return\u to]=request.referer这样的会话中,然后尝试在其他地方调用该会话[:user\u return\u to],但在保存request.referer时它不会访问该页面。我认为它试图找到自己的相对要求。当我在不同的行动中使用它时,请参考;我该如何硬保存request.referer的url,这样我就可以在任何地方使用该绝对url?我明白了-你是说重定向返回将用户发送回登录页面。那我有没有办法说回去两页?如果没有,我将如何存储原始位置?您可以将其存储在会话、cookie或任何您想要的内容中。然后,您只需检查该存储是否有内容,如果有,请重定向到该存储。我尝试将其存储在会话[:user\u return\u to]=request.referer这样的会话中,然后尝试在其他地方调用该会话[:user\u return\u to],但在保存request.referer时它不会访问该页面。我认为它试图找到自己的相对要求。当我在不同的行动中使用它时,请参考;如何硬保存request.referer的url,以便在任何地方使用该绝对url?对Ruby代码的注释:sign\u in\u url=http://localhost:3000/users/sign_in || http://onvard.com/users/sign_in || http://www.onvard.com/users/sign_in url\u for:action=>'new',:controller=>'sessions',:only\u path=>false,:protocol=>“http”将自动与sign\u in\u url=http://localhost:3000/users/sign_in.Comment 在Ruby代码上:登录url=http://localhost:3000/users/sign_in || http://onvard.com/users/sign_in || http://www.onvard.com/users/sign_in url\u for:action=>new',:controller =>'sessions',:only_path=>false,:protocol=>'http'将自动与\u url=http://localhost:3000/users/sign_in.