Ruby on rails 3 如何使用Desive和Rails 3验证用户名和密码是否正确

Ruby on rails 3 如何使用Desive和Rails 3验证用户名和密码是否正确,ruby-on-rails-3,devise,Ruby On Rails 3,Devise,我正在使用designe和rails3 我想调用一个函数,只需验证用户的用户名和密码组合是否正确,而无需实际登录该用户。有没有什么方法可以让我用Desive完成这样的事情: User.authenticate(params[:username], params[:password]) 好吧,Desive会自动进行:当用户输入登录信息时,它会为您进行检查 如果您想要更多的控制,那么您有两个选择: 1-查看设计来源,找出进行检查的地方 2-编写您自己的登录系统(并不像您想象的那么难)让用户退出数据

我正在使用
designe
rails3

我想调用一个函数,只需验证用户的
用户名
和密码组合是否正确,而无需实际登录该用户。有没有什么方法可以让我用Desive完成这样的事情:

User.authenticate(params[:username], params[:password])

好吧,Desive会自动进行:当用户输入登录信息时,它会为您进行检查

如果您想要更多的控制,那么您有两个选择:

1-查看设计来源,找出进行检查的地方


2-编写您自己的登录系统(并不像您想象的那么难)

让用户退出数据库:

user = User.find_by_email(params[:email])
然后,您可以通过以下方式检查他们的密码:

user.valid_password?(params[:password])

或使用一个衬里:

User.find_by_email(params[:email]).try(:valid_password?, params[:password])
它返回
true
nil

官方设计方式 Desive有两个功能可以让您完全做到这一点:

user = User.find_for_authentication(username: params[:username])
user.valid_password?(params[:password])

事实证明,如果Desive模型(在我的例子中是Person)具有:database_authenticable,那么它将创建一个名为Person#valid_password?(password)的方法,该方法可用于验证凭据。非常时髦。请确保在第一行代码上创建一个“user”变量,以便第二行可以使用它:user=user。通过电子邮件查找(params[:email])真棒,这就是我要找的。如果会话控制器中
params[:password]
为零,请选中
params[:user][:password]