kon*_*ung 10 authentication ruby-on-rails devise
是否可以设置Devise进行身份验证而无需密码?
这是一个Intranet应用程序.为了连接它,你必须首先在VPN上,加上应用程序只允许查看订单和历史的状态,而不是提交任何信息.我想类似于FedEx或UPS跟踪网站,但允许用户查看整个帐户,增加了客户端从我们这里获得的VPN盒的安全性.
现在我仍然需要密码,但这是对项目的不可协商的要求.客户已经习惯了这种方案,并且不太精通计算机以快速适应变化.
不太优雅的解决方案(不需要修改Devise):使用对所有用户都相同的默认密码
使用before_validation回调设置user.password和user.password_confirmation默认值(例如password).
使用生成Devise视图 rails generate devise:views
修改登录表单以使用默认密码值添加隐藏密码字段.
正如我所说,不优雅,但它应该做的伎俩,而不需要挖掘Devise内部.
更优雅的解决方案
在GitHub上开发Devise项目并根据您的需要调整https://github.com/plataformatec/devise/blob/master/lib/devise/strategies/database_authenticatable.rb
然后,您可以在Gemfile中指定fork.
在这种情况下,我更喜欢猴子补丁Devise::Strategies::Authenticatable而不是分叉整个设计存储库来进行一行更改。
Devise::Strategies::Authenticatable.class_eval do
private
def valid_password?
true
end
end
Run Code Online (Sandbox Code Playgroud)
只需将它放在初始化程序文件中或初始化程序的末尾devise.rb(我更喜欢这样,因为它看起来有点像额外的设计配置)。
解释一下,valid_password?这里的补丁通常只返回password.present?并用作Devise::Strategies::DatabaseAuthenticatable密码的初始验证,然后再根据数据库实际检查密码。因此,这只会在未提供密码时更改行为。
免责声明:到目前为止,这对我有用,但尚未经过全面测试,因此使用风险自负。
| 归档时间: |
|
| 查看次数: |
7214 次 |
| 最近记录: |