2011-05-12 64 views
6

我是新来的rails。我正在尝试为使用JSON进行身份验证的移动应用程序编写API。我想使用Devise进行身份验证。我相信Devise> 1.3也增加了对JSON的支持,但我无法找到任何示例或文献。使用Devise 1.3来验证JSON登录请求

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

谢谢! 萨蒂扬

回答

6

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

我打算在一两周内做同样的事情。

+0

非常感谢!这有帮助。 – Satyam 2011-05-23 07:15:25

+0

为了记录,我最终在Devise + JSON方面遇到了很多麻烦。我建议使用Rails 3.1的has_secure_password并添加自己的自定义功能。 – 2011-09-22 11:40:09

+1

诅咒!我们无法找到该页面。 – tambykojak 2014-04-27 09:02:03

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 

而且不要忘记更改航线使用该控制器

+1

正如我上面评论的那样,如果您使用的是Rails 3.1.0或更高版本,请自行推出。 – 2012-01-19 22:21:12

+0

@Tombart,该方法正常工作正确的uid/pwd json登录。如何处理错误密码的情况?在userwarden.authenticate!()将刚刚吐出的HTML重定向使用纯文本错误消息。 – GeorgeW 2012-08-10 16:03:11

6

我无法在链接页面最好的答案,所以我想我会加我自己的。 您不需要创建任何自定义控制器。所有你需要做的是以下几点:

在你的application.rb中加入下面的应用程序类

config.to_prepare do 
    DeviseController.respond_to :html, :json 
end 

在配置/初始化/ devise.rb :json添加到格式。该行默认注释掉,因此您需要取消该行的注释。

config.navigational_formats = ['*/*', :html, :json] 

在此之后,你可以发送一个JSON对象sign_in.json或任何你已经在你的路线登录设置。

{ 
    "user": { 
    "email": "[email protected]", 
    "password": "blah" 
    } 
} 

成功后,它将返回201创建,并将登录用户作为JSON对象返回。出错时,它将返回401并显示JSON消息,指出失败的原因。

实施例:

{"error":"Invalid email or password."} 

这里是如果使用的是主链上的很好的例子/ Marionntte上的前端。

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