ruby-on-rails - 根据 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
解决方案
您可以将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
推荐阅读
- java - 哪些地方需要 Java 接口的真实例子?
- nginx - 设置 nginx 以反向代理 heroku 站点
- c# - 将 Sql all 运算符转换为 linq
- google-app-engine - Google App Engine 应用程序和 Google Cloud Engine 实例之间的通信
- c# - 桌面桥 - 参考在 17134 中不起作用
- angular - 如何在 Angular 4 中将 ng-container 与 ng-content(带选择标签)一起使用
- javascript - javascript函数如何具有属性?
- apache-spark - 执行期间在 DAG 中的每一步缓存
- android - 扫描时如何将焦点移动到不同的edittext?
- mysql - 如何针对 MySql 中的每个 id 只获取一行