我已经按照railscasts视频#235和#236设置了带有Devise的OmniAuth。我可以让一切正常工作,当我在身份验证控制器中添加条件语句时,我的问题就出现了。我收到以下错误:
NoMethodError in AuthenticationsController#facebook未定义的方法"to_key"表示:用户:符号它似乎在:
sign_in_and_redirect(:user,authentication.user(
我在这里检查了其他答案,似乎没有一个解决方案。我找到了一个与 Heroku 相关的消息,但我在开发中收到这条消息。任何帮助将不胜感激。
authentications_controller.rb
Def 脸书 omniauth = request.env["omniauth.auth"] 身份验证 = Authentication.find_by_provider_and_uid(omniauth.provider, omniauth.uid( 如果身份验证 flash[:notice] ="已成功登录"。 sign_in_and_redirect(:user, authentication.user( 埃尔西夫·current_user current_user.身份验证.创建!(:p rovider => omniauth['provider'], :uid => omniauth['uid']( flash[:notice] ="身份验证成功"。 redirect_to authentications_url 还 @user = 用户.新 @user.apply_omniauth(omniauth( 如果@user保存 flash[:notice] ="已成功登录"。 sign_in_and_redirect(:user, @user( 还 session[:omniauth] = omniauth.except('extra'( redirect_to new_user_registration_url 结束 结束 结束
registrations_controller.rb
类 注册控制器设计::注册控制器 定义创建 超 session[:omniauth] = nil 除非 @user.new_record? 结束 私人 def build_resource(*args( 超 if 会话[:全身份验证] @user.apply_omniauth(session[:omniauth]( @user.有效吗? 结束 结束 结束
路线.rb
资源 :身份验证 get '/auth/:p rovider/callback' => 'authentications#facebook' devise_for :用户, :控制器 => {:注册 => '注册', :omniauth_callbacks => '身份验证'}
用户.rb
类用户活动记录::基本 has_many :身份验证 # 包括默认设计模块。其他可用的有: # :可确认、:可锁定、:超时和:全能 设计:d atabase_authenticatable, :registerable, :可恢复, :可记住, :可跟踪, :可验证, :全能 def apply_omniauth(omniauth( self.email = omniauth.info.email if email.blank? authentications.build(:p rovider => omniauth['provider'], :uid => omniauth['uid']( 结束 定义password_required? (authentications.empty? || !password.blank?(&&&超级 结束 结束
日志
活动记录::架构迁移加载(0.9ms( 选择"schema_migrations"。 从"schema_migrations"我, [2014-04-09T20:17:07.296969 #2248] 信息 -- 全向身份验证:(脸书(请求阶段已启动。I, [2014-04-09T20:17:07.353447 #2248] INFO -- omniauth: (facebook( 请求阶段已启动。I, [2014-04-09T20:17:07.518464 #2248] 信息 -- omniauth: (facebook( 回调阶段已启动。Processing by AuthenticationsController#facebook as HTML 参数: {"code"=>"AQC6I3SgbGI86ZBptFdBal5HIE1UHwCt7Zw5FVzGvWtApGhZfxjmXTo-AX3qJGOA_PWOeMK4i05K2yJL4_8bQLaTUjyvOBO4nQHjz2nLv5CTCMg2fPAsveUquO-UdVA8XajfUai9AQ8U8m4tfkwxysnq4n2bGBot2UCmFcfRGDB_b9uoIO8ELj80ltc3T0Vf2wj6XScl_R5m1o3CTUYqUzLQCukyjCb3Mz5_2_cWvHiCJLEiTMWjwccbrqNFhWgFCDNE0sLWZnESFNbdWUvFb_ug0NoXk4JevtQjv9XbW-FBiZ3FACn49grGlum1Z0I6qbI", "state"=>"758f521ee2e37251f404435d13e5f194fc7dab59cb412659"} 身份验证加载(2.2 毫秒(选择"身份验证"。* 从"身份验证"中"身份验证"中选择。提供者"="脸书"和"身份验证"。uid" = '578621157' 按"身份验证"排序。id" ASC 限制 1 用户负载(7.7 毫秒( 选择"用户"。* 从"用户"中,"用户"在哪里。id" = $1 按"用户"订购。id" ASC 限制 1 [["id", 3]]在 124 毫秒内完成 500 个内部服务器错误 渲染/Users/csmears/.rvm/gems/ruby-1.9.3-p545/gems/actionpack-4.0.0/lib/action_dispatch/中间件/模板/rescues/_source.erb (2.3ms( 渲染/Users/csmears/.rvm/gems/ruby-1.9.3-p545/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.2ms( 渲染/用户/csmears/.rvm/gems/ruby-1.9.3-p545/gems/actionpack-4.0.0/lib/action_dispatch/中间件/模板/rescues/_request_and_response.erb (1.9ms( 渲染/Users/csmears/.rvm/gems/ruby-1.9.3-p545/gems/actionpack-4.0.0/lib/action_dispatch/中间件/模板/rescues/diagnostics.erb 在rescues/layout(35.6ms(
问题出在哈希格式上。我改变了它:
sign_in_and_redirect(:用户,authentication.user.user_id(
这就解决了。
更改
sign_in_and_redirect(:user, authentication.user)
自
sign_in_and_redirect(authentication.user)