Я использую devise gem
вместе с omniauth gem
для Facebook, Twitter & Instagram. Ниже в gem
«s я использую:Ruby on rails - Перенаправить на предыдущий URL-адрес после аутентификации с помощью dev//// omniauth
gem 'devise'
gem 'omniauth'
gem 'omniauth-twitter'
gem 'omniauth-facebook'
gem 'omniauth-instagram'
gem 'twitter'
gem 'instagram'
Я последовал за this toturial Настройка Завещание с Twitter и Facebook.
Внутри моей omniauth_callbacks_controller.rb
я настроил generic_callback
функцию следующим образом:
def generic_callback(provider)
@identity = Identity.find_for_oauth env["omniauth.auth"]
@user = @identity.user || current_user
if @user.nil?
@tempUser = User.find_by_email(@identity.email) unless @identity.email.blank?
if @tempUser.nil?
@user = User.create(email: @identity.email, display_name: @identity.display_name, avatar: @identity.avatar, provider: @identity.provider || nil)
else
@user = @tempUser
end
@identity.update_attribute(:user_id, @user.id)
end
if @user.email.blank? && @identity.email
@user.update_attribute(:email, @identity.email)
end
if @user.persisted?
@identity.update_attribute(:user_id, @user.id)
@user = FormUser.find @user.id
sign_in_and_redirect @user, event: :authentication
set_flash_message(:notice, :success, kind: provider.capitalize) if is_navigational_format?
else
session["devise.#{provider}_data"] = env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
Все работает отлично, и что я хочу добиться, чтобы перенаправить пользователь предыдущий URL когда они sign_in или sign_up.
Перед установкой omniauth gem
и используется только devise gem
, я использовал этот метод в моем application_controller.rb
:
def after_sign_in_path_for(resource)
session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/ || request.fullpath =~ /\/macbook1/
end
Это было волшебство при использовании только devise
, но теперь, если этот метод внутри application_controller.rb
я получаю эту ошибку :
Я также попытался это с ошибкой:
def after_sign_in_path_for(resource_or_scope)
if request.env['omniauth.origin']
request.env['omniauth.origin']
end
end
Что мне нужно сделать, чтобы быть в состоянии redirect
пользователя предыдущий URL после sign_in или sign_up?