【问题标题】:Devise authentication without password, using just username设计无需密码的身份验证,仅使用用户名
【发布时间】:2011-06-07 10:52:49
【问题描述】:

是否可以设置Devise 无需密码进行身份验证?

这是一个 Intranet 应用程序。为了连接到它,您首先必须在 VPN 上,而且该应用程序只允许查看订单和历史记录的状态,而不能提交任何信息。我想类似于 FedEx 或 UPS 跟踪网站,但允许用户查看整个帐户,并增加了客户从我们这里获得的 VPN 盒的安全性。

现在我仍然需要密码,但这是项目中不可协商的要求。客户已经习惯了这种方案,并且不太精通计算机以快速适应变化。

【问题讨论】:

  • 如果太复杂(而且我对 Devise 不太熟悉),您可以将密码设置为隐藏的表单元素。
  • slhck,我可以。我可以使用一些虚拟密码设置所有帐户并将其提交到隐藏字段中,但这有什么乐趣呢? :-)

标签: ruby-on-rails authentication devise


【解决方案1】:

如果您还没有从DeviseController 或从DeviseController 继承的控制器(例如Devise::SessionsController)继承,这绝对可以使用sign_in 来完成。然后拨打sign_in(user):

class SignInWithoutPasswordsController < ApplicationController
  include Devise::Controllers::Helpers

  def sign_a_user_in_without_password
    user = User.find(params[:user_id])
    sign_in(user)
  end
end

【讨论】:

    【解决方案2】:

    在这种情况下,我更喜欢猴子补丁Devise::Strategies::Authenticatable,而不是分叉整个设计存储库以进行一行更改。

    Devise::Strategies::Authenticatable.class_eval do
      private
        def valid_password?
          true
        end
    end
    

    只需将其放在初始化程序文件中或 devise.rb 初始化程序的末尾(我更喜欢这个,因为它看起来有点像额外的设计配置)。

    解释一下,这里修补的valid_password? 通常只返回password.present?,并被Devise::Strategies::DatabaseAuthenticatable 用作在实际检查数据库之前对密码的初始验证。因此,这只会在未提供密码时改变行为。

    免责声明:到目前为止,这对我有效,但尚未经过全面测试,因此使用风险自负。

    【讨论】:

      【解决方案3】:

      不太优雅的解决方案(不需要修改设计):使用对所有用户都相同的默认密码

      使用before_validation 回调将user.passworduser.password_confirmation 设置为默认值(例如password)。

      使用rails generate devise:views 生成设计视图

      修改登录表单以使用您的默认密码值添加隐藏密码字段。

      正如我所说,它并不优雅,但它应该可以解决问题,而无需深入了解 Devise 的内部结构。


      更优雅的解决方案:

      在 GitHub 上创建 Devise 项目,并根据您的需要调整 https://github.com/plataformatec/devise/blob/master/lib/devise/strategies/database_authenticatable.rb

      然后您可以在 Gemfile 中指定您的 fork。

      【讨论】:

      • 大卫实际上在我上面的评论中。我考虑过,但正如你所说 - 不是那么优雅 :-) 无论如何谢谢,至少我得到了验证,因为我不是唯一一个想到这一点的人 :-)
      • 更新了更优雅的解决方案:-)
      • 感谢您为我指明了正确的方向——我什至没有看代码,第一次使用 devise,没想到这么简单。谢谢。
      • 嘿,我也在解决同样的问题,您能否阐明您所做的更改(在 database_authenticable.rb 文件中)以找到更优雅的解决方案 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多