使用Devise& amp; Omniauth

时间:2014-09-06 15:01:35

标签: ruby-on-rails devise omniauth

我一直在尝试将我的应用设置为将新注册/注册重定向到我的应用中的特定路线。我使用了建议在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进行用户模型设置。这是新注册的最重要的事情。

1 个答案:

答案 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行上的路径。