【发布时间】:2012-07-06 04:39:16
【问题描述】:
我正在使用 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 完成,但出现路由错误 => 当我返回并刷新页面时,用户已登录,所以我知道这只是路由的问题
任务控制器.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
ApplicationsController.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_path”,所以我知道之前的选项不起作用。 'else' 案例,这是我使用 jquery 创建的下拉登录表单,将用户重定向到上一页非常好,但是当我尝试将 request.referer 放在 'request.referer==sign_in_url' 案例中时,它给我一个无限循环。
即使用户通过 'users/sign_in' url 登录,我如何将用户重定向到上一页??
【问题讨论】:
-
注释 Ruby 代码:
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')将自动与sign_in_url = "http://localhost:3000/users/sign_in"相同。
标签: ruby-on-rails ruby-on-rails-3 redirect routing devise