在我的Rails应用程序中,我使用Devise进行身份验证。现在我想用一个额外的字段来扩展登录屏幕,用户只需要填写一个他知道的值,比如他在公司或其他什么地方开始的日期。
除了常规电子邮件和密码字段外,如何将此额外检查添加到Devise身份验证检查过程中?
我读了一些关于你可以在用户模型中扩展的active_for_authentication?
:
def active_for_authentication?
super && special_condition_is_valid?
end
这是正确的方法吗?
编辑:最后我覆盖了SessionsController:
class SessionsController < Devise::SessionsController
protected
def after_sign_in_path_for(resource)
if resource.is_a?(User) && !resource.correct_token?(params[:user][:security_token])
sign_out resource
flash[:error] = I18n.t('.devise.failure.invalid_token')
root_path
else
super
end
end
end
这受到了解决方案的启发:Rails + Devise - Is there a way to BAN a user so they can't login or reset their password?
我留下的唯一问题是,当提交无效令牌时,成功和错误消息都是可见的......
答案 0 :(得分:1)
我会简单地生成视图:
bundle exec rails generate devise:views
这会将设计视图复制到您的app / views文件夹中。 之后,您可以修改app / views / devise / sessions / new.html.erb文件,并使用表单字段对其进行扩展。
之后,您可以覆盖设计控制器。