通过用户名或电子邮件找到设备

时间:2018-02-06 04:30:49

标签: ruby-on-rails ruby devise

设置完成后 我希望通过用户名或电子邮件在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

2 个答案:

答案 0 :(得分:1)

我通过像这样覆盖 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

不需要更多了。

答案 1 :(得分:0)

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