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