我正在编写一个仅对在我公司工作的人开放的门户。我正在使用Devise框架来处理身份验证,但是有一个要求,只有员工才能注册。人力资源部将为每位员工发放一个随机生成的访问代码,然后该员工将使用其员工编号和访问代码来获得对该站点的初始访问权限。用户通过身份验证后,可以通过Devise处理完成注册的功能。
我们调查了devise_invitable,但决定不使用它,因为我们不想从员工那里收集电子邮件地址。
我已经通过创建自定义授权视图和控制器来检查员工编号/访问密码组合来实现此目的。这是我所做的:
在自定义控制器中,如果员工编号和访问代码组合正确,请在令牌表中设置身份验证令牌,在用户会话中设置匹配令牌,然后将流程重定向到Devise的注册/新方法。这是一些伪代码:
def check_authorization
if employee number and code are correct
token = SecureRandom.base58(36)
set database value to token
session[:authentication_token] = token
redirect_to devise_new_user_registration_path
else
render 'authorize'
end
end
在Devise的注册控制器中,检查与数据库中的会话令牌匹配的会话令牌,如果找不到,则将重定向流重定向到我的自定义授权控制器。一旦控制权传递给Devise,我还编写了一个帮助程序方法来清理授权。我对新方法和创建方法进行了更改,并保留了其他所有内容。更多伪代码:
def new
if( get_authorization( session[:ot_authorization_token] ) == nil )
redirect_to custom_authorization_path
else
super
end
end
def create
authorization = get_authorization( session[:ot_authorization_token] )
if( authorization == nil )
redirect_to custom_authorization_path
else
super do |authorization|
clean_up( authorization )
end
end
end
这项工作有效吗?我有什么想念的吗?预先感谢您的帮助。