设计通过用户名或电子邮件查找

Devise find by username or email

设置设计后 我想在 api 会话

中通过用户名或电子邮件获取用户

我将登录名传递给了参数,但 rails 吐出一个错误

User.find_for_database_authentication(:login => params[:username][:email])

模型上 find_for_database_authentication 的覆盖已经完成。

def self.find_for_database_authentication(warden_conditions)

有人有什么提示吗?

设计

class Api::SessionsController < Devise::SessionsController

  respond_to :json

  def create
    resource = User.find_for_database_authentication(:login => params[:username][:email])



    if resource.valid_password?(params[:login][:password])
      sign_in(:user, resource)

      render :json=> {:auth_token=>resource.authentication_token, :email=>resource.email}, :status => :ok
      return
    end
    invalid_login_attempt
  end
end

试试这个:User.find_by(username: 'username')User.find_by(email: 'your@email.com')

我通过重写 find_for_database_authentication 来做到这一点:

class User
  def self.find_for_database_authentication(auth_hash)
    self.where("username = :query OR email = :query", query: auth_hash[:email]).first
  end
end

不需要更多。