ruby-on-rails – Rails&Devise:设计未显示在rails控制台中
发布时间:2020-12-16 22:45:01 所属栏目:百科 来源:网络整理
导读:我试图在我的用户模型上使用Devise但是当我进入rails控制台并尝试User.new时我只得到: irb(main):002:0 User.new= #User id: nil,first_name: nil,last_name: nil,email: nil,created_at: nil,updated_at: nil 为什么设计专栏没有出现? CreateUsers迁移:
我试图在我的用户模型上使用Devise但是当我进入rails控制台并尝试User.new时我只得到:
irb(main):002:0> User.new => #<User id: nil,first_name: nil,last_name: nil,email: nil,created_at: nil,updated_at: nil> 为什么设计专栏没有出现? CreateUsers迁移: class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.string :first_name t.string :last_name t.string :email t.timestamps null: false end end end AddDeviseToUsers迁移: class AddDeviseToUsers < ActiveRecord::Migration def self.up change_table :users do |t| ## Database authenticatable t.string :email,null: false,default: "" t.string :encrypted_password,default: "" ## Recoverable t.string :reset_password_token t.datetime :reset_password_sent_at ## Rememberable t.datetime :remember_created_at ## Trackable t.integer :sign_in_count,default: 0,null: false t.datetime :current_sign_in_at t.datetime :last_sign_in_at t.string :current_sign_in_ip t.string :last_sign_in_ip ## Confirmable # t.string :confirmation_token # t.datetime :confirmed_at # t.datetime :confirmation_sent_at # t.string :unconfirmed_email # Only if using reconfirmable ## Lockable # t.integer :failed_attempts,null: false # Only if lock strategy is :failed_attempts # t.string :unlock_token # Only if unlock strategy is :email or :both # t.datetime :locked_at # Uncomment below if timestamps were not included in your original model. # t.timestamps null: false end add_index :users,:email,unique: true add_index :users,:reset_password_token,unique: true # add_index :users,:confirmation_token,:unlock_token,unique: true end def self.down # By default,we don't want to make any assumption about how to roll back a migration when your # model already existed. Please edit below which fields you would like to remove in this migration. raise ActiveRecord::IrreversibleMigration end end 架构显示列在那里: create_table "users",force: :cascade do |t| t.string "first_name" t.string "last_name" t.datetime "created_at",null: false t.datetime "updated_at",null: false t.string "email",default: "",null: false t.string "encrypted_password",null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.integer "sign_in_count",null: false t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" t.string "current_sign_in_ip" t.string "last_sign_in_ip" end add_index "users",["email"],name: "index_users_on_email",unique: true add_index "users",["reset_password_token"],name: "index_users_on_reset_password_token",unique: true 有任何想法吗? 解决方法
它是Devise的一个安全功能,用于限制其属性及其包含的关键信息以暴露给API调用.
但是,您可以覆盖它,您需要覆盖serializable_hash方法. # app/models/user.rb class User < ActiveRecord::Base devise :database_authenticatable,:recoverable,:confirmable,:rememberable,:validatable ... protected def serializable_hash(options = nil) super(options).merge(encrypted_password: encrypted_password,reset_password_token: reset_password_token) # you can keep adding attributes here that you wish to expose end end 您可以检查http://www.rubydoc.info/github/plataformatec/devise/Devise/Models/Authenticatable将常量声明为黑名单属性的位置 BLACKLIST_FOR_SERIALIZATION =[:encrypted_password,:reset_password_sent_at,:remember_created_at,:sign_in_count,:current_sign_in_at,:last_sign_in_at,:current_sign_in_ip,:last_sign_in_ip,:password_salt,:confirmed_at,:confirmation_sent_at,:remember_token,:unconfirmed_email,:failed_attempts,:locked_at] 希望这能回答你的问题! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |