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