在Rails Devise app中Find_for_database_authentication vs Find_by?

所以,我正在尝试使用设计建立一个React前端和Rails后端,而Rails端应该是一个内部API。 这是我第一次这样做,所以我正在努力进行身份validation。 具体来说,在我的SessionsController中,我有这样的代码:

def create resource = User.find_for_database_authentication(email: params[:email]) return invalid_login_attempt unless resource if resource.valid_password?(params[:password]) sign_in :user, resource return render nothing: true end invalid_login_attempt end 

这总是返回401 Unauthorized。 我检查调用valid_password的结果? 它总是假的。

但是,如果我用find_for_database_authentication替换find_by ,那么valid_password? 工作没有问题。 为什么是这样? 如果现在用户只能输入他的电子邮件而不是他的密码,这没关系,但这确实让我很困惑。 它也让我觉得这不会使用任何令牌检查(不同的问题)。

另一方面,我也想知道CSRF令牌是否适用于内部API(我应该使用不同的令牌身份validation吗?),以及如果用户使用登录表单我应该如何包含CSRF令牌尚未登录,但我猜这些是另一篇文章的问题。 谢谢你的帮助。