【问题标题】:User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE "users"."email"用户存在 (0.2ms) SELECT 1 AS one FROM "users" WHERE "users"."email"
【发布时间】:2015-12-03 18:32:43
【问题描述】:

在我的应用程序中,当我尝试创建用户时

 User.create(email:"jnan@gmail.com",encrypted_password: "foobar",name:"jnan")

显示

  (0.1ms)  begin transaction
  User Exists (0.2ms)  SELECT  1 AS one FROM "users"  WHERE "users"."email" = 'jnan@gmail.com' LIMIT 1
 (0.1ms)  rollback transaction
=> #<User id: nil, email: "jnan@gmail.com", encrypted_password: "foobar", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: nil, updated_at: nil, name: "jnan">

我的用户包含

=> User(id: integer, email: string, encrypted_password: string, reset_password_token: string, reset_password_sent_at: datetime, remember_created_at: datetime, sign_in_count: integer, current_sign_in_at: datetime, last_sign_in_at: datetime, current_sign_in_ip: string, last_sign_in_ip: string, created_at: datetime, updated_at: datetime, name: string)

【问题讨论】:

  • 检查您的验证错误。
  • 顺便说一句,您可能应该设置 passwordpassword_confirmation 而不是 encrypted_password
  • 或采取设计或任何其他身份验证宝石。大声笑
  • 您在使用设计吗?要检查验证错误,请执行user = User.create(... 之类的操作,然后输入user.errors.messages
  • 是的...问题已解决,感谢您提供的信息,顺便说一下我接受了@MarekLipka 的回答:)

标签: ruby-on-rails model-view-controller model


【解决方案1】:

你应该设置passwordpassword_confirmation,而不是设置encrypted_password

password = 'foobar'
User.create(email:'jnan@gmail.com',password: password, password_confirmation: password, name: 'jnan')

【讨论】:

  • 是的,如果 OP 正在使用设计,并且从表/列中看起来他们这样做了,这是正确的答案。
  • 哈,导致这个答案的讨论在另一个答案上有点奇怪困惑 :) 然后 OP 的问题解决了,他们忘记接受了 :)
【解决方案2】:

Marek 是对的,您应该在创建任何记录时设置密码和密码确认。你不应该使用 encrypted_pa​​ssword。

当你传递密码和密码确认来设计它时,使用属性访问器检查是否相等,如果验证顺利,设计内部会为保存在 encrypted_pa​​ssword 字段中的密码创建一个 md5 字符串。所以没有人可以直接看到密码。

2.1.0 :002 > User.create(email:"jnan@gmail.com",encrypted_password: "foobar")
   (0.1ms)  BEGIN
  User Exists (124.5ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = 'jnan@gmail.com' LIMIT 1
   (0.2ms)  ROLLBACK
 => #<User id: nil, email: "jnan@gmail.com", encrypted_password: "foobar", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, confirmation_token: nil, confirmed_at: nil, confirmation_sent_at: nil, unconfirmed_email: nil, created_at: nil, updated_at: nil, first_name: nil, last_name: nil, profile_image: nil, gender: nil, date_of_birth: nil> 
2.1.0 :003 > User.create(email:'jnan@gmail.com',password: 'password', password_confirmation: 'password')
   (0.2ms)  BEGIN
  User Exists (0.6ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = 'jnan@gmail.com' LIMIT 1
  User Load (24.7ms)  SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = '1442820d0b7521559ec07584408c6fdb6490444117383d76f6bf1dfc6dd90af6' ORDER BY "users"."id" ASC LIMIT 1
  SQL (246.6ms)  INSERT INTO "users" ("confirmation_sent_at", "confirmation_token", "created_at", "email", "encrypted_password", "updated_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id"  [["confirmation_sent_at", Tue, 08 Sep 2015 08:24:55 UTC +00:00], ["confirmation_token", "1442820d0b7521559ec07584408c6fdb6490444117383d76f6bf1dfc6dd90af6"], ["created_at", Tue, 08 Sep 2015 08:24:54 UTC +00:00], ["email", "jnan@gmail.com"], ["encrypted_password", "$2a$10$Uw9088ovsHC/tCeEN0aJGeI83ax7bjXD2RcQHjvlLg.SovJcyz1MS"], ["updated_at", Tue, 08 Sep 2015 08:24:54 UTC +00:00]]

【讨论】:

    【解决方案3】:

    您需要将唯一的电子邮件放入数据库。

    旧的jhan@gmail.com被拍

    【讨论】:

    • 即使我尝试使用随机邮件,它也会给出相同的消息
    • 向我们展示您的User 模型
    • 应用程序使用设计 gem。并且没有验证
    • @vjnan369 有验证,因为它是设计模型。显示您的验证错误。
    • 我是这么认为的。就像我写的那样,设置passwordpassword_confirmation 而不是encrypted_password
    【解决方案4】:

    这也有效(没有password_confirmation

    user = User.create(name: "raj",email:"raj@gmail.com",password: "foobar")
    

    【讨论】:

      猜你喜欢
      • 2019-03-29
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      相关资源
      最近更新 更多