我的应用程序具有一个控制器,该控制器的操作需要在特殊密码后与经过身份验证的用户隔离。
一种想象的方式:普通用户开展业务。偶尔,管理员需要输入密码,以使普通用户可以访问该区域。
我在我的应用程序中以常规方式设置了Devise身份验证,因此所有用户都通过了身份验证。
我现在如何设置一个单独的密码,以便对控制器的所有调用都要求输入一个特殊的单独密码?
答案 0 :(得分:1)
一种实现方法是在Devise身份验证的基础上从头开始引入简单身份验证 使用
bcrypt
库。
您将在users
表中需要一个新字段来存储特殊密码摘要。因此,创建一个新的迁移文件,并为其添加以下代码:
def change
add_column :users, :special_password, :digest
end
将Bcrypt宝石添加到您的Gemfile中:
gem 'bcrypt', '~> 3.1', '>= 3.1.12'
在您的用户模型中添加以下行:
has_secure_special_password
现在,在您的特殊密码验证控制器中,使用以下代码通过current_user
来验证special_password
if current_user.authenticate(params[:user][:special_password])
session[:special_user_id] = current_user.id
end
现在无论您要使用特殊密码对用户进行身份验证的任何控制器操作,都创建一个before_action
过滤器并尝试通过session[:special_user_id]
查找用户,如果找不到该用户,则可以要求他们输入special_password