ruby on rails - Devise + Omniauth + Facebook



我已经按照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)

相关内容

  • 没有找到相关文章

最新更新