首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >设计:创建没有密码的用户

设计:创建没有密码的用户
EN

Stack Overflow用户
提问于 2015-08-24 15:02:46
回答 4查看 22.4K关注 0票数 32

在我们的应用程序中,我们有普通用户。然而,我们希望能够发出邀请,邀请某些人。请注意,邀请直接耦合到用户,因为我们希望能够为这些用户设置某些设置。(我们正在将客户从旧软件减少到新软件)。

所以:

  • 管理员应该能够创建一个新用户并更改其设置。
  • 当某人使用他们的invitation_token跟踪一个链接时,他们应该看到一个表单,在那里他们可以为他们的帐户设置密码。

我遇到的问题是,如何让管理员创建一个用户帐户,绕过正常的密码验证。如果需要设置默认密码,这将是一个可怕的解决方案,因为这会造成严重的安全缺陷。

如何在设计中创建一个新用户而不提供密码?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-08-24 15:35:33

至少有两种方法可以做你想做的事:

方法1:

过载设计的password_required?方法

代码语言:javascript
运行
复制
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

用法:

代码语言:javascript
运行
复制
@user.skip_password_validation = true
@user.save

方法2:

使用validate: false选项禁用验证:

代码语言:javascript
运行
复制
user.save(validate: false)

这将跳过所有字段的验证(不仅仅是密码)。在这种情况下,您应该确保所有其他字段都是有效的。

但我建议您不要在特定情况下创建没有密码的用户。我将创建一些额外的表(例如,invitations),并存储所有所需的信息,包括您希望在确认后分配给用户的字段。

票数 75
EN

Stack Overflow用户

发布于 2017-08-09 11:15:12

TL;DR:

代码语言:javascript
运行
复制
user.define_singleton_method(:password_required?) { false }

小提琴:

代码语言:javascript
运行
复制
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
票数 7
EN

Stack Overflow用户

发布于 2019-11-27 19:12:16

现在,您可以使用DeviseInvitable gem进行此操作。

它能让你完全按照你的要求去做。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32185562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档