2016-11-09 74 views
0

我想创建一个登录使用设计与我已计算的用户名。作为一个例子,我们假设我们想命名空间我们的用户名 - 我想从登录表单接收一个用户名,并使用namespaced_username来进行实际的身份验证。设计与计算/操作的用户名参数登录

所以在我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

我该如何获得设计(特别是监狱战略)来阅读新参数?

回答

0

原来这是一个Rails 5问题。基本上,Warden(由devise使用)传递请求对象,可能在中间件中,然后交给控制器一个请求的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