Ruby on rails 设计,RubyonRails,在验证之前更改登录详细信息的格式

Ruby on rails 设计,RubyonRails,在验证之前更改登录详细信息的格式,ruby-on-rails,devise,Ruby On Rails,Devise,我们使用Desive发送电子邮件,但现在我们正在过渡到移动登录(用户提供他们的手机号码),因为这是我们唯一需要的信息。电子邮件将是好的,但不是必需的 我已将其与手机号码身份验证一起使用: config.authentication_keys = [ :mobile ] 如果您输入的数字与输入的数字完全一致,则此功能有效。尽管人们可以通过多种方式输入数字(相对于电子邮件) i、 e 本地格式 0125551234 还是国际 27125551234 实际上,当我将手机号码存储在DB中时,我会对其进

我们使用Desive发送电子邮件,但现在我们正在过渡到移动登录(用户提供他们的手机号码),因为这是我们唯一需要的信息。电子邮件将是好的,但不是必需的

我已将其与手机号码身份验证一起使用:

config.authentication_keys = [ :mobile ]
如果您输入的数字与输入的数字完全一致,则此功能有效。尽管人们可以通过多种方式输入数字(相对于电子邮件)

i、 e

本地格式 0125551234

还是国际 27125551234

实际上,当我将手机号码存储在DB中时,我会对其进行规范化,因此我希望在进行身份验证之前使用相同的规范化

除了重写会话控制器,还有其他方法吗

更新:

使用以下方法:


原因是我们已经有一些用户,如果他们没有捕获他们的手机,我们需要允许他们使用电子邮件登录。

您可以在ApplicationController中指定一种方法(仅因为您不想覆盖SessionController),该方法将
参数[:mobile]
转换为您想要的任何格式

prepend_before_filter :format_mobile_param

def format_mobile_param
  return unless params[:mobile]
  params[:mobile] = your_formatting_method(params[:method])
end

这将在调用
authenticate\u user!之前更改参数
(假设您在before筛选器中调用
authenticate\u user!

我认为最好的方法是覆盖sessioncontroller,只需在before\u筛选器之前添加一个prepend\u:format\u mobile\u参数。不要忘记将此方法的作用域设置为SessionController的create方法。
另外,不要忘记添加控制器路由。希望能有所帮助。

谢谢,这很有效,但决定使用另一种策略,而不是更换控制器等。