如何为某些区域创建单独的Devise身份验证



我的应用程序有一个控制器,它的操作需要通过特殊密码与经过身份验证的用户切断。

一种想象方式是:普通用户开始做他们的生意。偶尔,管理员需要输入他/她的密码,让普通用户访问某个区域。

我在我的应用程序中以正常方式设置了Devise身份验证,所以我的所有用户都经过了身份验证。

我现在如何设置一个单独的密码,以便所有对控制器的调用都会导致请求一个特殊的单独密码?

实现这一点的一种方法是在Devise的身份验证之上从头开始引入一个简单的身份验证使用CCD_ 1库。

users表中需要一个新字段来存储特殊密码摘要。因此,创建一个新的迁移文件和下面的代码:

def change
add_column :users, :special_password, :digest
end

将Bcrypt宝石添加到您的宝石文件:

gem 'bcrypt', '~> 3.1', '>= 3.1.12'

在您的用户模型中添加以下行:

has_secure_special_password

现在,在您的专用密码验证控制器中,使用以下代码使用special_password验证current_user

if current_user.authenticate(params[:user][:special_password])
session[:special_user_id] = current_user.id
end

现在,在您想要使用特殊密码验证用户的任何控制器操作中,创建一个before_action过滤器,并尝试通过session[:special_user_id]找到用户,如果没有找到用户,您可以要求他们输入special_password

最新更新