是否可以设置Devise进行身份验证而无需密码?
这是一个内部网应用。为了连接它,你必须首先在VPN上,加上应用程序只允许查看订单的状态&历史,不提交任何信息。我想类似于FedEx或UPS跟踪网站,但允许用户查看整个帐户,增加了客户端从我们这里获得的VPN盒的安全性。
现在我仍然需要密码,但这是对项目的不可协商的要求。客户已经习惯了这种方案,并且不太精通计算机,无法快速适应变化。
答案 0 :(得分:8)
不那么优雅的解决方案(不需要修改Devise):使用对所有用户都相同的默认密码
使用before_validation
回调将user.password
和user.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。
答案 1 :(得分:3)
在这种情况下,我更喜欢使用猴子补丁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
用作密码的初始验证,然后再对数据库进行检查。因此,这只会在未提供密码时更改行为。
免责声明:这对我来说至今无效,但尚未经过全面测试,因此使用风险自负。
答案 2 :(得分:0)
有点晚了,但是如果您尚未从Devise::Controllers::Helpers
继承或从{{1 }}(例如DeviseController
)。然后只需致电DeviseController
:
Devise::SessionsController