Ruby Rails 在控制器中模拟 Devise authed 用户

Posted

技术标签:

【中文标题】Ruby Rails 在控制器中模拟 Devise authed 用户【英文标题】:Ruby Rails Simulate a Devise authed user in a controller 【发布时间】:2021-12-07 15:28:59 【问题描述】:

这可能很明显,但我没有看到;

我如何在控制器中创建一个用户并完全在控制器操作中验证该用户只是为了显示目的?

我想做类似的事情;

fake_user = User.new
fake_user.auth! # or what ever to simulate it as if fake_user had logged in.. 

但我不希望将用户保存到数据库中。

【问题讨论】:

为什么要这样做?当您说要“验证”用户时,您的意思是您要注销当前用户并登录假用户吗?或者你的意思是你的用户模型是authorisable 并且你想翻转那个开关?解释听起来像前者,但这肯定会破坏您的用户体验。 好问题。我不想对用户进行身份验证。我想拥有第二个经过身份验证的用户,但不是用于测试目的的真实用户,但不是在 rspec 中。 UI 中的一个实际位置,我们可以实时测试未经身份验证的用户可以做什么,没有任何权限的经过身份验证的用户,以及具有权限的经过身份验证的用户(实际用户).. 这是 DEV 唯一的事情,只会显示在开发服务器上仅供我的 QA 团队参考。 为什么这一定是假用户?我通常会为此目的设置每个用户角色的一个示例。添加假用户的额外复杂性只是意味着测试与现实世界之间的距离更大。 是的,我只想在数据库中添加一个虚拟用户,没有人可以登录,但由于应用程序的其他方面,这可能不是一个选项。 我怀疑问题是,如果用户没有保存到数据库中,那么尝试从数据库加载用户详细信息的应用程序部分肯定会出现问题 - 用户 -个人资料页面或所有用户的列表或其他内容。您能否为不包含您的虚拟用户的 User 模型创建一个默认范围?然后除非明确引用,否则它们将不可见。 【参考方案1】:

如果你只是想测试,我会覆盖 User 上的 signed_in? 方法并使其返回 true。

class User < ApplicationRecord
   def signed_in?
      true
   end
end

这样在你看来你可以问@user.signed_in?

【讨论】:

以上是关于Ruby Rails 在控制器中模拟 Devise authed 用户的主要内容,如果未能解决你的问题,请参考以下文章

Ruby/Rails:您如何自定义 Devise 的邮件模板?

无法在 gem Devise 中调整控制器,ruby on rails 4

markdown [rails:devise] Ruby on Rails的身份验证gem。 #ruby #rails

如何在 Ruby on Rails 中使用 Devise 验证密码强度?

将 Stripe 与 Devise 一起用于 Ruby on Rails 订阅

ruby 使用Devise gem验证您的API,使用标头标记。 Ruby on Rails 4.阅读评论。