阻止关联在Rails 5中进行验证

基兰E

使用Rails 5,我尝试实现Omniauth-Facebook和Clearance进行用户身份验证。

注意:我的代码就是这样的Gist

我得到它大部分工作。但是,在使用Facebook进行注册时(即,用户从未访问过该网站),Rails会抛出错误信息Validation failed: User must exist我将要点缩小到要点中的这一部分:

  def self.create_with_omniauth(auth_hash)
    create! do |auth|
      auth.provider = auth_hash["provider"]
      auth.uid = auth_hash["uid"]
      auth.token = auth_hash["credentials"]["token"]
    end
  end

当遇到该问题时,它将尝试在create!没有auth.user对象存在的情况下失败。这是来自sessions控制器的相关代码

#-- Spectically, the line below
authentication = Authentication.find_by_provider_and_uid(auth_hash["provider"], auth_hash["uid"]) || Authentication.create_with_omniauth(auth_hash)
#-- More code, for context
if authentication.user
  user = authentication.user 
  authentication.update_token(auth_hash)
  @next = root_url
  @notice = "Signed in!"
else
  user = User.create_with_auth_and_hash(authentication,auth_hash)
  @next = edit_user_path(user)   
  @notice = "User created - confirm or edit details..."
end

要点我唯一想念的就是他Authentications桌子的结构使用找到的上下文线索,创建了此表:

  def change
    create_table :authentications do |t|
      t.string :provider
      t.string :uid
      t.string :token
      t.references :user, foreign_key: true

      t.timestamps
    end
  end

如果需要更多信息,我将尽力提供

奥列格·安东尼安(Oleg Antonyan)

在Rails 5中,默认情况下要求属居于http://blog.bigbinary.com/2016/02/15/rails-5-makes-belong-to-association-required-by-default.html,因此您将获得一个没有它的验证错误。

在此示例中,您尝试创建Authentication不带的对象User,这就是为什么您收到“验证失败:用户必须存在”的原因。

如果您确实想在没有用户的情况下创建身份验证对象,则应该可以使用:

class Authentication < ActiveRecord::Base
  belongs_to :user, optional: true
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

模型关联在Rails中调用

来自分类Dev

将所有模型关联在Rails上的ruby中

来自分类Dev

Rails多态关联在模型中不可用

来自分类Dev

获得所有has_many关联在rails中

来自分类Dev

在Rails中进行验证

来自分类Dev

升级到 rails 5 后通过关联在 has_many 中出现未知列错误

来自分类Dev

灯具关联在邮件测试中失败

来自分类Dev

如何关联在SFML-IMGUI中创建的按钮?

来自分类Dev

如何使关联在一对多关系中无效?

来自分类Dev

文件关联在Windows 8.1中如何工作?

来自分类Dev

验证Rails中的关联模型

来自分类Dev

Rails根据关联记录进行验证

来自分类Dev

在Ruby on Rails中进行电子邮件验证?

来自分类Dev

在Rails中进行验证之前剥离电话号码输入

来自分类Dev

覆盖默认的Parsley转换以在Rails中进行验证

来自分类Dev

仅将来日期-在Rails模型中进行验证

来自分类Dev

使用attr_accessor在Rails中进行条件验证

来自分类Dev

如何在Ruby on Rails模型中进行条件验证?

来自分类Dev

努力了解模型中存在关联时为什么需要在Rails中进行联接/包含

来自分类Dev

在rails3中进行重构

来自分类Dev

验证关联Rails的存在

来自分类Dev

验证关联Rails的存在

来自分类Dev

在rails_admin关联中进行类似查询的更改

来自分类Dev

更新关联对象以在Rails中进行多对多设置

来自分类Dev

Rails 5 HABTM关联

来自分类Dev

如何使关联在已构建和未保存的对象中起作用?

来自分类Dev

为什么我的BelongsToMany关联在CakePHP中不起作用?

来自分类Dev

Ruby检查记录是否存在以及关联在一行中

来自分类Dev

配置以允许可选的belongs_to关联在rail 6中不起作用