使用Devise 1.3对JSON登录请求进行身份validation

我是铁杆新手。 我正在尝试为使用JSON进行身份validation的移动应用程序编写API。 我想使用Devise进行身份validation。 我相信Devise> 1.3也增加了对JSON的支持,但我找不到任何关于它的例子或文献。

有人可以指出我的任何资源或提供一些示例代码?

谢谢! 萨蒂扬

也许这个> http://jessehowarth.com/devise

我打算在一两个星期内做同样的事情。

我无法进入顶部答案中的链接页面,所以我想我会添加自己的。 您无需创建任何自定义控制器。 您需要做的就是以下内容:

在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,这是一个很好的例子。

http://joshhuckabee.com/integrating-devise-backbonejs

使用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 

并且不要忘记更改路由以使用此控制器