- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Rails 新手,正在安装我的第一个集成 Facebook 登录/注册的应用程序。我关注了发布在这里的 Ryan Bates 的 RailsCast 视频:https://stackoverflow.com/a/4954443/1302333 .
我按照他的集成 Twitter 的教程进行操作,但我在使用 Facebook 时遇到了问题。当我访问 http://localhost:3000/auth/facebook
我收到此错误:
NoMethodError in AuthenticationsController#create
undefined method `serialize_into_session' for Symbol:Class
devise (2.1.0) lib/devise/rails/warden_compat.rb:19:in `serialize'
warden (1.1.1) lib/warden/session_serializer.rb:25:in `store'
warden (1.1.1) lib/warden/proxy.rb:161:in `set_user'
devise (2.1.0) lib/devise/controllers/helpers.rb:124:in `sign_in'
devise (2.1.0) lib/devise/controllers/helpers.rb:236:in `sign_in_and_redirect'
app/controllers/authentications_controller.rb:11:in `create'
actionpack (3.2.6) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (3.2.6) lib/abstract_controller/base.rb:167:in `process_action'
actionpack (3.2.6) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (3.2.6) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
activesupport (3.2.6) lib/active_support/callbacks.rb:414:in `_run__1508312784814672110__process_action__3616665370535505566__callbacks'
activesupport (3.2.6) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.6) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
activesupport (3.2.6) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.6) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (3.2.6) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (3.2.6) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
activesupport (3.2.6) lib/active_support/notifications.rb:123:in `block in instrument'
activesupport (3.2.6) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (3.2.6) lib/active_support/notifications.rb:123:in `instrument'
actionpack (3.2.6) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
actionpack (3.2.6) lib/action_controller/metal/params_wrapper.rb:206:in `process_action'
activerecord (3.2.6) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (3.2.6) lib/abstract_controller/base.rb:121:in `process'
actionpack (3.2.6) lib/abstract_controller/rendering.rb:45:in `process'
actionpack (3.2.6) lib/action_controller/metal.rb:203:in `dispatch'
actionpack (3.2.6) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
actionpack (3.2.6) lib/action_controller/metal.rb:246:in `block in action'
actionpack (3.2.6) lib/action_dispatch/routing/route_set.rb:73:in `call'
actionpack (3.2.6) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
actionpack (3.2.6) lib/action_dispatch/routing/route_set.rb:36:in `call'
journey (1.0.3) lib/journey/router.rb:68:in `block in call'
journey (1.0.3) lib/journey/router.rb:56:in `each'
journey (1.0.3) lib/journey/router.rb:56:in `call'
actionpack (3.2.6) lib/action_dispatch/routing/route_set.rb:600:in `call'
omniauth (1.1.0) lib/omniauth/strategy.rb:392:in `call_app!'
omniauth (1.1.0) lib/omniauth/strategy.rb:354:in `callback_phase'
omniauth-oauth2 (1.0.2) lib/omniauth/strategies/oauth2.rb:65:in `callback_phase'
omniauth (1.1.0) lib/omniauth/strategy.rb:219:in `callback_call'
omniauth (1.1.0) lib/omniauth/strategy.rb:175:in `call!'
omniauth (1.1.0) lib/omniauth/strategy.rb:157:in `call'
omniauth (1.1.0) lib/omniauth/strategy.rb:177:in `call!'
omniauth (1.1.0) lib/omniauth/strategy.rb:157:in `call'
omniauth (1.1.0) lib/omniauth/builder.rb:48:in `call'
warden (1.1.1) lib/warden/manager.rb:35:in `block in call'
warden (1.1.1) lib/warden/manager.rb:34:in `catch'
warden (1.1.1) lib/warden/manager.rb:34:in `call'
actionpack (3.2.6) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
rack (1.4.1) lib/rack/etag.rb:23:in `call'
rack (1.4.1) lib/rack/conditionalget.rb:25:in `call'
actionpack (3.2.6) lib/action_dispatch/middleware/head.rb:14:in `call'
actionpack (3.2.6) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
actionpack (3.2.6) lib/action_dispatch/middleware/flash.rb:242:in `call'
rack (1.4.1) lib/rack/session/abstract/id.rb:205:in `context'
rack (1.4.1) lib/rack/session/abstract/id.rb:200:in `call'
actionpack (3.2.6) lib/action_dispatch/middleware/cookies.rb:338:in `call'
activerecord (3.2.6) lib/active_record/query_cache.rb:64:in `call'
activerecord (3.2.6) lib/active_record/connection_adapters/abstract/connection_pool.rb:473:in `call'
actionpack (3.2.6) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
activesupport (3.2.6) lib/active_support/callbacks.rb:405:in `_run__2824763875952710462__call__1302249347533121180__callbacks'
activesupport (3.2.6) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.6) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
activesupport (3.2.6) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.6) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (3.2.6) lib/action_dispatch/middleware/reloader.rb:65:in `call'
actionpack (3.2.6) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
actionpack (3.2.6) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
actionpack (3.2.6) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
railties (3.2.6) lib/rails/rack/logger.rb:26:in `call_app'
railties (3.2.6) lib/rails/rack/logger.rb:16:in `call'
actionpack (3.2.6) lib/action_dispatch/middleware/request_id.rb:22:in `call'
rack (1.4.1) lib/rack/methodoverride.rb:21:in `call'
rack (1.4.1) lib/rack/runtime.rb:17:in `call'
activesupport (3.2.6) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.4.1) lib/rack/lock.rb:15:in `call'
actionpack (3.2.6) lib/action_dispatch/middleware/static.rb:62:in `call'
railties (3.2.6) lib/rails/engine.rb:479:in `call'
railties (3.2.6) lib/rails/application.rb:220:in `call'
rack (1.4.1) lib/rack/content_length.rb:14:in `call'
railties (3.2.6) lib/rails/rack/log_tailer.rb:17:in `call'
rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service'
/Users/felixthea/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
/Users/felixthea/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
/Users/felixthea/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'
class AuthenticationsController < ApplicationController
def index
@authentications = current_user.authentications if current_user
end
def create
omniauth = request.env["omniauth.auth"]
authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
if authentication
flash[:notice] = "Signed in successfully."
sign_in_and_redirect(:user, authentication.user)
elsif current_user
current_user.authentications.create!(:provider => omniauth['provider'], :uid => omniauth['uid'])
flash[:notice] = "Authentication successful."
redirect_to authentications_url
else
user = User.new
user.apply_omniauth(omniauth)
if user.save
flash[:notice] = "Signed in successfully."
sign_in_and_redirect(:user, user)
else
session[:omniauth] = omniauth.except('extra')
redirect_to new_user_registration_url
end
end
end
def destroy
@authentication = current_user.authentications.find(params[:id])
@authentication.destroy
redirect_to authentications_url, :notice => "Successfully destroyed authentication."
end
protected
# This is necessary since Rails 3.0.4
# See https://github.com/intridea/omniauth/issues/185
# and http://www.arailsdemo.com/posts/44
def handle_unverified_request
true
end
end
最佳答案
您正在使用旧的教程版本。
如果您使用的是 devise 2.0 或更高版本,则步骤如下:
1º 在您的 config/initializers/devise.rb
require "omniauth-facebook"
config.omniauth :facebook, "YOUR_APP_ID", "YOUR_APP_SECRET", :strategy_class => OmniAuth::Strategies::Facebook
gem 'omniauth'
gem 'omniauth-facebook'
gem 'oauth2'
user.rb
型号添加模块
:omniauthable
某事喜欢:
class User
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable, :omniauthable and :invitable
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable, :omniauthable
end
routes.rb
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks", :registrations => "registrations" } do
users
在您的 Controller 文件夹中,并且在您必须在
app/controllers/users/omniauth_callbacks_controller.rb
中创建文件之后
omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
# with this code you can see the data sent by facebook
omniauth = request.env["omniauth.auth"]
@user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
if @user.persisted?
flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook"
sign_in_and_redirect @user, :event => :authentication
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
end
def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
user = User.where(:provider => auth.provider, :uid => auth.uid).first
unless user
user = User.create(name:auth.extra.raw_info.name,
provider:auth.provider,
uid:auth.uid,
email:auth.info.email,
password:Devise.friendly_token[0,20]
)
end
user
end
def self.new_with_session(params, session)
super.tap do |user|
if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["user_hash"]
user.email = data["email"]
end
end
end
devise/registrations/new.html.erb
您必须添加:
<%= link_to "Sign in with Facebook", user_omniauth_authorize_path(:facebook) %>
关于ruby-on-rails - 设计、Omniauth 和 Facebook 集成 session 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11093120/
我已经将 gitlab 全部设置好并准备好omniauth,我想知道是否可以完全禁用使用密码和用户名的默认身份验证并仅使用omniauth(在我们的例子中为google登录)。我希望通过将 Googl
我是 Rails 和 Omniauth 的新手,所以提前为愚蠢的人感到抱歉 题。 我正在尝试为 Deezer 网站制定 Omniauth 策略。 http://www.deezer.com/en/de
所以我试图让 omniauth-facebook 在我的生产环境中工作。它使用 POW 在我的机器上本地运行良好。 我的产品环境是带有 nginx/unicorn 的 ubuntu,代码是 Rails
嗨,我正在学习如何使用omniauth 作为 ember 应用程序的后端。 当我运行我的应用程序时,我得到下面提到的错误 OmniAuth::NoSessionError - 您必须提供 sessio
我正在使用: Ruby on Rails 4 设计 3.0.3 omniauth (1.1.4) omniauth-facebook (1.4.1) omniauth-twitter (1.0.0)
如果我使用 omniauth 进行 Twitter 验证.. 下面的代码是 def create user = User.from_omniauth(env["omniauth.auth"])
再具体一点: 如果我打电话,我的 Rails 应用程序运行良好 /auth/facebook/callback或 /auth/facebook/callback?format=json 但是当我尝试打
在我的项目中,我有两类用户:求职者和招聘经理。求职者没有模型,他们只能使用从第三方供应商处收到的数据申请工作,同时通过 Omniauth 进行身份验证。招聘经理的信息存储在设计用户模型中。招聘经理还必
我正在尝试在 Rails 3.2.9 中使用 omniauth-facebook 登录 Facebook;我遵循了 Ryan Bates 在 http://railscasts.com/episode
我一直在探索我的 Rails 应用程序的身份验证选项。我需要用户名/密码身份验证以及将用户与其 Facebook、Twitter、Foursquare 等身份链接的选项。我通常会发现人们为此目的使用
关于如何记住我与 Omniauth 一起工作似乎有些困惑。 根据这个wiki ,您需要在 OmniauthCallbacksController 中包含以下内容: remember_me(user)
说我有用户和项目模型。用户和项目与HABTM相关。我的设置实际上比这要复杂一些,但是出于我的问题,我认为这可以做到。 现在,我想使用omniauth通过Twitter,Facebook来验证特定项目,
我正在尝试使用 omniauth 测试一个简单的 facebook 登录。但是,收到一条错误消息,指出“auth”未定义 variable 或 method。 omniauth 测试文档不包含 fac
我在 Twitter 上使用 gem。回调时,检查用户是否存在并创建他或将他发送回主页。 我可能做错了什么,但在我的回调代码中, request.env['omniauth.origin'] 为零 .
我将 OmniAuth 与 Devise 结合使用,以允许用户使用 facebook 登录或使用用户名和密码创建普通帐户。当我最初设置它时,我使用了来自 Railscasts 的优秀指导。 .在 2
我在端口 3101 上运行了一个 Rails 应用程序我通过 Apache 反向代理设置(就像 Phusion 在 this blog post 上建议的那样)将它提供给互联网。 我正在使用 Devi
我正在开发一个 Rails 3.0 应用程序并使用 OmniAuth + Identity 来验证注册。我已经实现了一个通过外键与身份模型相关联的用户模型,并且一切运行良好。现在,我想实现一个忘记密码
我有一个 Rails 应用程序设置为 OAuth2 提供程序(使用 Doorkeeper)。该应用程序为每个用户帐户使用不同的子域(或通过 cname 记录使用完全不同的域) i.e. user1.m
我正在使用 omniauth和 omniauth-identity用于通过 Google、Facebook 和传统用户名/密码进行身份验证。除了身份验证失败的情况外,我的所有工作都很好。失败时,例如输
我正在构建一个网站,并添加了“使用 Slack 登录”按钮。 我正在使用 omniauth-slack(最新的 8b2371),它运行良好。 但我只想允许来自我自己的 Slack 团队的用户。 有te
我是一名优秀的程序员,十分优秀!