我对Rails相对较新,我在使用omniauth-facebook时遇到了问题。我已设法将“登录Facebook”链接添加到我的应用程序中(详细信息如下),当我点击它时,我将被带到:
https://www.facebook.com/dialog/oauth?client_id=etc
它不加载任何东西。甚至没有任何有用的错误消息。 :(只是一个空白的白色屏幕。
当我读取我的rails日志时,它停留在:
在2014-08-21 10:48:30 -0400开始获取127.0.0.1获取“/ users / auth / facebook” I,[2014-08-21T10:48:30.308966#29948] INFO - omniauth:(facebook)发起请求阶段。
我能找到的另一个类似问题的帖子是here。我按照建议更改了我正在处理的端口,但它没有任何区别。
所以,更多细节:
我使用Railscasts,Omniauth文档以及互联网上的不同指南几个小时来修补这个问题。每一次尝试都把我引向了同样的砖墙。目前,我正在关注this OmniAuth overview for Facebook with Devise over at GitHub并已跟进添加
%li = link_to“使用Facebook登录”,user_omniauth_authorize_path(:facebook)
到我的布局。
我有
宝石'omniauth'
gem'omniauth-facebook'
在我的gemfile中。
已添加
设计:omniauthable,:omniauth_providers => [:Facebook的]
到我的User.rb文件,将uid和provider列添加到我的Users表中,并添加了
config.omniauth:facebook,'KEY','SECRET'
to config / initializers / devise.rb。
这是我添加到一个非常基本的应用程序中的所有内容,该应用程序只有Devise User模型和一些与我的域相关的其他模型。
有人可以帮我解决这个问题吗?这让我疯了。
修改
我正在使用Rails 4.1.4和Ruby 2.1.2以及最新的omniauth和omniauth-facebook gems。
的routes.rb
devise_for :users, :controllers => { :omniauth_callbacks => 'users/omniauth_callbacks' }
resources :users, :only => [:show, :index]
root 'main#index'
和rake路线:
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
user_omniauth_authorize GET|POST /users/auth/:provider(.:format) users/omniauth_callbacks#passthru {:provider=>/facebook/}
user_omniauth_callback GET|POST /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:facebook)
users GET /users(.:format) users#index
user GET /users/:id(.:format) users#show
root GET / main#index
我已经添加了omniauth_callbacks控制器,并了解我之前没有做过的事情 - 指向该控制器以查找不在Devise :: OmniauthController中的操作不添加路由,正如我最初想的那样。无论如何,这并没有解决我的Facebook问题,但我认为我会编辑这个以纠正我之前的误解。
更多修改
我让omniauth-github使用以下内容:
routes.rb中:
devise_for :users, :controllers => { :omniauth_callbacks => 'omniauth_callbacks' }
resources :users, :only => [:show, :index]
root 'main#index'
user.rb:
devise :omniauthable, :omniauth_providers => [:facebook, :github]
omniauth_callbacks_controller.rb
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def github
@user = User.from_omniauth(request.env["omniauth.auth"])
if @user.persisted?
sign_in_and_redirect @user
set_flash_message(:notice, :success, :kind => "Github") if is_navigational_format?
else
session["devise.github_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
end
devise.rb:
config.omniauth :github, 'KEY', 'SECRET'
我已成功登录Twitter以同样的方式工作。
我为OmniatuhsCallbackController制作了一个与github动作完全相同的facebook动作,只用facebook代替github,我仍然遇到与facebook相同的问题。