【问题标题】:How to manually save a new user from the rails console when using devise?使用设计时如何从rails控制台手动保存新用户?
【发布时间】:2021-04-19 16:16:56
【问题描述】:

我有一个只有一个用户的应用,我想清除数据库并重新开始。

我保存了用户表并清除了数据库,现在想在新数据库中创建单个用户。

我可以做类似this:

user = User.new(
  email: "testm@example.com", 
  password: "1234",
  admin: false,
  time_zone: "International Date Line West",
  first_name: "testm",
  last_name: "testm"
  )

问题是,我不知道他们的密码(我也不应该知道),而且我不知道如何获取他们现有的“encrypted_pa​​ssword”并将其插入新数据库(我有标准设计字符串好像是这样"$2a$12$13Mu.SLk/M2KOFaqFkYAg.lTmq0mnqoWh6kL186yeK/yumS6C70HG")

如何创建记录并向其提供设计字符串作为encrypted_password 的值?

注意:尝试将encrypted_password: "$2a$12$13Mu.SLk/M2KOFaqFkYAg.lTmq0mnqoWh6kL186yeK/yumS6C70HG" 添加到上面只会导致:

ActiveRecord::RecordInvalid: Validation failed: Password can't be blank

【问题讨论】:

  • @RockwellRice 感谢您的帮助。我将旧数据保存为 csv。你说得对,我只是想在新的(空)数据库中设置用户

标签: ruby-on-rails devise


【解决方案1】:

运行相同的命令没有验证,并使用encrypted_password而不是password似乎有效:

user = User.new(
  email: "testm2@example.com", 
  encrypted_password: "$2a$12$MVR2XoDAAQVwRNsPT039K.MkEKXH5AhxpWafgiCQQM0o5wNXt6sVG",
  admin: false,
  time_zone: "International Date Line West",
  first_name: "testm",
  last_name: "testm"
  ).save!(validate: false)

我用虚拟账号测试,用户可以成功登录。

我不确定这是否会导致任何其他问题,因此请谨慎使用(如果比我更了解的其他人知道这种方法可能导致的任何问题,请发表评论)

另一种方法

另一种方法是不用担心调用 ActiveRecord 对象,而是直接与数据库交互。例如通过:https://github.com/zdennis/activerecord-import

注意事项

对于这两种方法,要考虑的一件事是,如果您在保存后有任何回调(例如通过after_savebefore_save),那么确保调用这些方法可能很重要,如果这样做有意义的话所以

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-10
    • 2015-09-21
    • 2022-01-13
    • 2011-02-23
    • 2011-06-23
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多