使用Devise / DatabaseAuthenticatable模块检查密码/ salt字符串

时间:2017-01-12 21:14:14

标签: ruby-on-rails devise

我正在构建一个使用Devise来管理用户状态的应用。我还在同一个应用程序中构建一个API,该应用程序从POST请求中接收用户名和密码

我想要完成的是:

  • 从数据库中获取用户名(完成,直截了当)
  • 使用Devise::Models::DatabaseAuthenticatable获取用户传入的密码,对其进行加密,将其与用户模型上的encrypted_password字段进行比较,如果它们相同,请继续执行其余操作我的代码

上面的第二个项目是我遇到的问题。在控制台中,我似乎无法获取模块Devise::Models::DatabaseAuthenticatable的实例来尝试您在docs中可以找到的各种实例方法。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,您可以使用.valid_password?设计方法。这样的事情:

#assuming you'll receive nested params like user[email], user[password]...
user_params = params.require(:user).permit(:email, :password)

user = User.find_by(email: user_params[:email])
return head 403 if user.nil?
valid = user.valid_password?(user_params[:password]) #true or false...
return head 403 unless valid

sign_in(user) #devise helper: if you want to sign in that user

您还可以查看其他方法,例如devise token auth gem。