0

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

我已经让它与手机号码认证一起使用:

config.authentication_keys = [ :mobile ]

如果您输入的数字与输入的完全相同,它就会起作用。尽管人们可以通过多种方式输入数字(相对于电子邮件)

IE

本地格式 0125551234

或国际 27125551234

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

除了覆盖会话控制器之外,还有其他方法吗?

更新:

使用以下方法:https ://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-username-or-email-address

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

4

2 回答 2

0

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

prepend_before_filter :format_mobile_param

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

这将在调用之前更改参数authenticate_user!(假设您调用authenticate_user!了之前的过滤器)。

于 2013-04-07T00:25:05.067 回答
0

我认为最好的方法是覆盖 SessionsController,只需添加一个 prepend_before_filter :format_mobile_param。不要忘记将此方法的范围限定为 SessionsController 的 create 方法。另外,不要忘记添加控制器路由。希望能帮助到你。

于 2013-04-07T01:22:29.777 回答