在我们的应用程序中,我们有普通用户。然而,我们希望能够发出邀请,邀请某些人。请注意,邀请直接耦合到用户,因为我们希望能够为这些用户设置某些设置。(我们正在将客户从旧软件减少到新软件)。
所以:
invitation_token跟踪一个链接时,他们应该看到一个表单,在那里他们可以为他们的帐户设置密码。我遇到的问题是,如何让管理员创建一个用户帐户,绕过正常的密码验证。如果需要设置默认密码,这将是一个可怕的解决方案,因为这会造成严重的安全缺陷。
如何在设计中创建一个新用户而不提供密码?
发布于 2015-08-24 15:35:33
至少有两种方法可以做你想做的事:
方法1:
过载设计的password_required?方法
class User < ActiveRecord::Base
attr_accessor :skip_password_validation # virtual attribute to skip password validation while saving
protected
def password_required?
return false if skip_password_validation
super
end
end用法:
@user.skip_password_validation = true
@user.save方法2:
使用validate: false选项禁用验证:
user.save(validate: false)这将跳过所有字段的验证(不仅仅是密码)。在这种情况下,您应该确保所有其他字段都是有效的。
…
但我建议您不要在特定情况下创建没有密码的用户。我将创建一些额外的表(例如,invitations),并存储所有所需的信息,包括您希望在确认后分配给用户的字段。
发布于 2017-08-09 11:15:12
TL;DR:
user.define_singleton_method(:password_required?) { false }小提琴:
class MockDeviseUser
protected
def password_required?
true
end
end
class User < MockDeviseUser
def is_password_required?
puts password_required?
end
end
unrequired_password_user = User.new
unrequired_password_user.define_singleton_method(:password_required?) { false }
unrequired_password_user.is_password_required?
regular_user = User.new
regular_user.is_password_required?
#false
#true发布于 2019-11-27 19:12:16
现在,您可以使用DeviseInvitable gem进行此操作。
它能让你完全按照你的要求去做。
https://stackoverflow.com/questions/32185562
复制相似问题