2

我正在使用 Devise 和 Omniauth 进行 facebook 身份验证。在用户使用 Devise(regular) 或 Omniauth(fb) 登录后,我试图将用户重定向到上一页。

“request.referer”在用户使用我的导航栏上的下拉登录时有效,但是当用户尝试通过“http://localhost:3000/users/sign_in”url 登录时,“request.referer”会返回给我无限循环错误。

这是顺序。问题在(d)中。(a) 未登录用户点击为任务投票。(b) 用户被重定向到“users/sign_in” url,因为“before_filter :authenticate_user!” 在任务控制器中。(c) 用户通过输入用户名/密码或单击 Facebook 图标登录。(d) 用户应该被重定向回上一页,功能 VoteUp 完成,但给出路由错误 => 当我返回并刷新页面时,用户已登录,所以我知道这只是路由问题

MissionsController.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

应用程序控制器.rb

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_pa​​th”,所以我知道之前的选项不起作用。'else' 案例,这是我使用 jquery 创建的下拉登录表单,将用户重定向到上一页非常好,但是当我尝试将 request.referer 放入 'request.referer==sign_in_url' 案例中时,它给了我一个无限循环。

即使用户通过“用户/登录”网址登录,我如何将用户重定向到上一页?

4

2 回答 2

0

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

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

于 2012-07-06T12:00:48.783 回答
0

我正在向使用设计并遇到相同问题的 OP 的后代解决这个回复:您应该能够通过使用来解决它#stored_location_for,它返回用户在被重定向到登录页面之前想要到达的路径。

于 2016-02-01T15:14:51.553 回答