首页 > 解决方案 > 根据 Rails 条件返回设计错误

问题描述

当我发布session到 rails/devise 时,我要么得到user数据的响应,要么得到一个平淡无奇的错误消息。如何根据创建会话时出现的问题发回自定义消息?

当前代码:

class V1::SessionsController < ApiBaseController

  skip_before_action :verify_authenticity_token

    def create
      email = params[:user] && params[:user][:email]
      username = params[:user] && params[:user][:username]

      @user = User.where(email: email).first if email
      @user = User.where(username: username).first if username

      if @user&.valid_password?(params[:user] && params[:user][:password])

       @user.update_user_login_timestamp
       respond_to do |format|
         format.json { render '/users/show', status: :ok }
       end
       else
         render json: {success: false, message: "no good"}, status: 500
       end
     end

   private

  def user_params
    params.require(:user).permit(:email, :password, :username)
  end

end

我想做的事:

if username_found_but_password_doesnt_match
   render json: {error: "bad password"} status: 500
 elsif username_not_found
   render json: {error: "doesnt exist"} status: 500
end

标签: ruby-on-railsdevise

解决方案


您可以将create操作编写为:

def create
  email = params[:user] && params[:user][:email]
  username = params[:user] && params[:user][:username]
  @user = User.where(email: email).first if email
  @user = User.where(username: username).first if username

  respond_to do |format|
    if @user.blank?
      format.json { render json: {error: "doesnt exist"}, status: 404 }
    elsif @user.valid_password?(params[:user] && params[:user][:password])
      @user.update_user_login_timestamp
      format.json { render '/users/show', status: :ok }
    else
      format.json { render json: {error: "bad password"}, status: 422 }
    end
  end
end

推荐阅读