我想详细说明上面对我有用的@jeroen-van-dijk 给出的(正确)答案。
在 config/routes.rb 中,在 devise_for 块中添加一个新路由:
devise_for :users, :controllers => {
:omniauth_callbacks => "user_omniauth_callbacks" } do
...
get '/users/connect/:network', :to => redirect("/users/auth/%{network}"),
:as => 'user_oauth_connect'
end
然后更改您的“使用 facebook 登录”链接以使用新路线:
<!-- before it linked to user_omniauth_authorize_path -->
<%= link_to "Sign in using Facebook", user_oauth_connect_path(:facebook) %>
在 app/controllers/user_omnniauth_callbacks_controller.rb
class UserOmniauthCallbacksController < Devise::OmniauthCallbacksController
include Devise::Controllers::Rememberable
def facebook
@user = User.find(...)
...
remember_me(@user) # set the remember_me cookie
end
end
这个解决方案非常适合我使用 Rails 3.1 和 Devise 1.4.9。