after_sign_in_path_for(资源)设计+ facebook omniauth

时间:2016-11-23 23:52:39

标签: ruby-on-rails facebook devise omniauth

我的用户模型已过生日,如果在使用Facebook登录后为空,我会尝试重定向到编辑页面。我尝试覆盖资源的after_sign_in_path,但一直收到此错误:

  

在此操作中多次调用渲染和/或重定向。请注意,您只能调用渲染或重定向,每次操作最多一次。另请注意,重定向和渲染都不会终止操作的执行,因此如果要在重定向后退出操作,则需要执行类似" redirect_to(...)之类的操作并返回"。

我的应用程序控制器:

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  def after_sign_in_path_for(resource)
    stored_location_for(resource) ||
    if resource.birthday.blank?
      redirect_to edit_user_path(resource)
    end
    super
  end
end

和我的Omniauth控制器:

class OmniauthCallbacksController < ApplicationController
  skip_before_filter :authenticate_user!

  def provides_callback_for
    user = User.from_omniauth(env["omniauth.auth"], current_user)
    if user.persisted?
      flash[:notice] = "You have signed in!"
    sign_in_and_redirect(user)
    else
      session['devise.user_attributed'] = user.attributes
      redirect_to new_user_registration_url
    end
  end

  def failure
    flash[:notice] = "Something went wrong!"
    redirect_to root_path
  end

  alias_method :facebook, :provides_callback_for
end

1 个答案:

答案 0 :(得分:0)

这应该可以解决问题:

def after_sign_in_path_for(resource)
    if resource.birthday.blank?
      edit_user_registration_url
    else
      super
    end
end