代码之家  ›  专栏  ›  技术社区  ›  Cory Baker

根据轨道条件返回设计误差

  •  0
  • Cory Baker  · 技术社区  · 6 年前

    当我张贴 session 对于rails/device,我要么得到响应, 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
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Arup Rakshit    6 年前

    你可以写 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