2016-11-23 87 views
0

我的用户模型有生日,我试图重定向到编辑页面,如果它登录Facebook后是空白的。我试图重写资源的after_sign_in_path但不断收到此错误:after_sign_in_path_for(resource)devise + facebook omniauth

Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".

我的应用程序控制器:

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 

回答

0

这应该做的伎俩:

def after_sign_in_path_for(resource) 
    if resource.birthday.blank? 
     edit_user_registration_url 
    else 
     super 
    end 
end 
相关问题