2011-05-12 63 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