我是铁杆新手。我正在尝试为使用JSON进行身份验证的移动应用程序编写API。我想使用Devise进行身份验证。我相信Devise> 1.3也增加了对JSON的支持,但我找不到任何关于它的例子或文献。
有人可以指点我的任何资源或提供一些示例代码吗?
谢谢! 萨特雅姆
答案 0 :(得分:7)
我无法进入顶部答案中的链接页面,所以我想我会添加自己的。 您不需要创建任何自定义控制器。您需要做的就是:
在您的application.rb中,在您的应用程序类中添加以下内容
config.to_prepare do
DeviseController.respond_to :html, :json
end
在config / initializers / devise.rb中,将:json
添加到格式中。默认情况下,此行已注释掉,因此您需要取消注释该行。
config.navigational_formats = ['*/*', :html, :json]
在此之后,您可以将json对象发送到sign_in.json或您在路由中设置的任何内容以进行登录。
{
"user": {
"email": "blah@blah.com",
"password": "blah"
}
}
一旦成功,它将返回201创建,并将登录用户作为JSON对象。如果出错,它将返回401,并带有一条JSON消息,指出失败的原因。
示例:
{"error":"Invalid email or password."}
如果您在前端使用Backbone / Marionntte,这是一个很好的例子。
答案 1 :(得分:6)
也许这一个> http://jessehowarth.com/devise?
我打算在一两个星期内做同样的事情。
答案 2 :(得分:4)
使用html格式响应时,Jesse Howarth的解决方案将破坏浏览器的日志记录。如果你想让JSON和HTML都能运行,请试试这样的:
class SessionsController < Devise::SessionsController
def create
resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
set_flash_message(:notice, :signed_in) if is_navigational_format?
sign_in(resource_name, resource)
respond_to do |format|
format.html { respond_with resource, :location => after_sign_in_path_for(resource) }
format.json {
return render :json => { :success => true,
:user => resource
}
}
end
end
end
不要忘记更改路线以使用此控制器