下面的示例是我今天如何对用户进行身份验证:
def create
if is_internal_request(params[:authenticity_token])
@user = User.authenticate(params[:email], params[:password])
if @user
session[:user_id] = @user.id
render :json => true
else
render :json =>
{
error:
{
code: 1,
message: t('globals.errors.authentication.user-not-found')
}
}.to_json
end
end
end
注意这个片段:
render :json =>
{
error:
{
code: 1,
message: t('globals.errors.authentication.user-not-found')
}
}.to_json
基于此,我想知道它是否有条理且稳固。我的意思是,这是正确的方式吗?
让我们假设我的应用程序中有一些地方可以检查用户的电子邮件可用性。我想要干,并在每次需要使用它时重复使用该验证。如果我正在进行验证的方式(如下所示)根本不是“完美”,我怎样才能创建一个每次我都想要有用的验证层?
我的意思是,每次我想验证时,不是创建和重新创建代码片段,而是做这样的事情的最佳方式是什么?:
email = params[:email]
unless email_is_available(email)
render :json => { message: 'E-mail isn't available' }
end
用“这样做的最佳方法是什么?”我说,我必须放置email_is_available
功能才能让它正常工作?
答案 0 :(得分:0)
答案 1 :(得分:0)
这样的事情怎么样?
if @user.valid?
render :json => true
else
error_hash = {}
@user.errors.each{|k,v| error_hash[k] = "#{k.capitalize} #{v}"}
#this will give you a hash like {"email" => "Email is not available"}
render :json => {:errors => error_hash}
end
在客户端,你将得到它(例如作为一个名为data
的对象),看看是否有data.errors的值,然后向用户显示各种错误消息。
注意我没有插入任何翻译内容,但你可以这样做:)
答案 2 :(得分:0)
我建议您从头开始查看Ryan Bates的Railscast验证。它引导您解决所有问题,并且比依靠像Devise这样大而重的东西重量轻得多。
http://railscasts.com/episodes/250-authentication-from-scratch