繁体   English   中英

Rails无法注册第二个用户

[英]Rails devise not able to register a second user

我在Devise中使用Rails,并且它正在连接数据库的MS SQL Server。 一切正常,工作正常。

当我尝试注册第二个人时,出现以下错误:

ActiveRecord::RecordNotUnique in Devise::RegistrationsController#create

TinyTds::Error: Cannot insert duplicate key row in object 'dbo.users' with
unique index 'index_users_on_reset_password_token'. The duplicate key value
is (<NULL>).: EXEC sp_executesql N'INSERT INTO [users] ([email],
[encrypted_password], [created_at], [updated_at]) OUTPUT INSERTED.[id] 
VALUES (@0, @1, @2, @3)', N'@0 nvarchar(4000), @1 nvarchar(4000), @2 
datetime, @3 datetime', @0 = N'ben_mcmaster@outlook.com', @1 = 
N'$2a$10$TK79.NSrjZaT93TiQphqB.M6XfBUlaGFmAqJUGgssdGggR4OB.7oC', @2 = '05-
09-2016 06:40:34.448', @3 = '05-09-2016 06:40:34.448'

我主要查看的事实是它试图创建一个新的重置密码令牌,但是它试图使其变为NULL,因为它已经存在(在第一个用户中)。

在我的应用程序中,因为我可以做所有事情,所以只需要几个人,因此实际上不需要执行重置密码。

我可以:

  1. 获取编写实际唯一重置令牌的应用程序
  2. 绕过它

据我了解,您可以在应用程序中没有完整的“忘记密码”功能。 本问题所述,您需要在设计模型中删除:recoverable选项,我认为这应该可以解决您的问题。

我认为问题是SQL Server。

一方面,Devise默认情况下在user.reset_password_token上添加唯一索引。 这允许用户使用带有一次令牌的重置密码链接来重置其密码。 重置密码后,字段“ reset_password_token”将重置为null。

另一方面,标准表示UNIQUE约束应禁止重复的非NULL值,但允许多个NULL值。 而且SQL Server始终实现了此功能的简化版本,允许使用单个NULL,但不允许使用多个NULL值。

总之,如果我是您,我将以这种方式重新启动迁移:

https://gist.github.com/andyhull/8045794202fd52930f93

希望对您有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM