使用计算/操作的用户名参数设计登录

我正在尝试使用带有我已计算的用户名的设计创建登录。 作为一个例子,我们假设我们想要命名我们的用户名 – 我希望从登录表单接收用户名,并使用namespaced_username进行实际身份validation。

所以在我的User::SessionsController#create ,我可能有:

 def create params[:user][:namespaced_username] = "namespace/#{params[:user][:mobile_number]}" super end 

尽管设计正在侦听namespaced_username(在初始化程序或模型本身中配置了authentication_keys),并且用户设置为namespace/username ,但我仍然会被告知Invalid Namespaced username or password is not valid

我如何获得设计(特别是看守策略)来阅读新的参数?

事实certificate这是一个Rails 5问题。 基本上,Warden(由设计使用)传递请求对象,可能在中间件中,然后控制器交给请求的params散列的副本。

修复它的简单方法是,在User::SessionsController#create ,我们需要添加一行:

 def create # Here we change params - but this won't be seen by the warden strategy params[:user][:namespaced_username] = = "namespace/#{params[:user][:mobile_number]}" # Inject our changes into the copy in request request.params[:user].merge!(params[:user]) # now our changes will be seen by warden - continue with devise: super end