Ошибка Devise + Facebook Omniauth при перенаправлении

Я использую devise, omniauth и facebook-omniauth для своего приложения Rails 3.1. После аутентификации я хотел перенаправить пользователя на просматриваемую страницу. Я использовал следующий код для того же:

def facebook
@user = Spree::User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
if @user.persisted?
flash[:notice] = "Yipee! You were successfully authorized from your Facebook account!!"
sign_in @user, :event => :authentication
redirect_to request.referrer
end

Это дает мне следующую ошибку только во время создания пользователя:

ActionController::ActionControllerError in Spree::OmniauthCallbacksController#facebook
Cannot redirect to nil!

В следующих случаях, когда пользователь уже создан, во время и после входа в систему ошибки не отображаются.

Как вы предлагаете мне это исправить? Спасибо!


person Sandeep Laxman    schedule 26.06.2012    source источник


Ответы (1)


вы можете перезаписать функции для пути входа/регистрации в вашем контроллере приложений:

def after_sign_up_path_for(resource)
  credit_path 
  return request.env['omniauth.origin'] || session[:return_to] 
end 

def after_sign_in_path_for(resource)
  return request.env['omniauth.origin'] || session[:return_to]
end

используйте сеансы для сохранения текущего пути в пути, по которому вы хотите, чтобы они шли: session[:return_to] = request.url #store current location

или вы создаете метод, который всегда будет вызываться, как только они перейдут по пути и сохранят это местоположение. при этом следите за перенаправлением гигантского цикла.

person aminh101sj    schedule 26.06.2012
comment
Спасибо! Это действительно помогло мне, я только что сделал небольшое изменение в соответствии с тем, что вы предложили, и это сработало: redirect_to request.referrer||request.env['omniauth.origin'] - person Sandeep Laxman; 27.06.2012