我一直在尝试将我的应用设置为将新注册/注册重定向到我的应用中的特定路线。我使用了建议在app / controllers / users /中创建注册控制器的设计文档,然后使用
def after_sign_up_path_for(resource)
show_cities_path(resource)
end
但即使在编辑路线文件以包含它之后我也没有运气。
devise_for :users, :controllers => { :omniauth_callbacks => "omniauth_callbacks", :registrations => "users/registrations" }
我目前正在使用Twitter Omniauth和Devise。
我的路线文件如下:
Rails.application.routes.draw do
devise_for :users, :controllers => { :omniauth_callbacks => "omniauth_callbacks" }
端
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def twitter
auth = env["omniauth.auth"]
@user = User.find_for_twitter_oauth(request.env["omniauth.auth"],current_user)
if @user.persisted?
flash[:notice] = I18n.t "devise.omniauth_callbacks.success"
sign_in_and_redirect @user, :event => :authentication
else
session["devise.twitter_uid"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
end
有人可以推荐替代方法或告诉我哪里出错了吗?
编辑:对不起,可能不太清楚。我已经使用Devise和Omniauth进行用户模型设置。这是新注册的最重要的事情。答案 0 :(得分:3)
经过研究,我发现当使用Omniauth(Devise doesn't redirect properly to stored location when using omniauth provider like facebook)时,Devise不能正确地重定向。
所以我在application_controller.rb
中实现了这个def after_sign_in_path_for(resource_or_scope)
if resource.sign_in_count == 1
new_product_path
else
root_path
end
end
首次登录时,它会将它们重定向到您想要在该方法的第3行上的路径。