2012-12-14 111 views
4

我們正在升級具有兩種身份驗證用戶身份驗證方法的應用程序。擴展設計以支持JSON API

  1. 控制器具有before_filter :authenticate_user!回調和像標準的Rails站點一樣訪問。
  2. API模塊內的控制器,通過客戶端應用程序通過JSON訪問。除了只有前綴/api的驗證操作外,所有路由的前綴都是/api/session_id/

兩種方式都使用User模型對用戶進行身份驗證。

有沒有一種方法來配置設備來支持它們呢?怎麼樣?

注意:我不想通過JSON創建用戶。我只是想驗證它們。

回答

0

我通過覆蓋設計的會話控制器來做到這一點。

項添加到自定義會話控制器路線:

devise_for :users, :controllers => {:sessions => 'sessions'} 

並覆蓋會話控制器:

class SessionsController < Devise::SessionsController 

    def create 
     resource = warden.authenticate!(:scope => resource_name, :recall => "sessions#failure") 
     return sign_in_and_redirect(resource_name, resource) 
    end 

    def sign_in_and_redirect(resource_or_scope, resource=nil) 
     scope = Devise::Mapping.find_scope!(resource_or_scope) 
     resource ||= resource_or_scope 
     sign_in(scope, resource) unless warden.user(scope) == resource 
     respond_with do |format| 
     format.json {render :json => {:success => true} } 
     format.any {super} 
     end 
    end 

    def failure 
     respond_with do |format| 
     format.json {render:json => {:success => false, :errors => ["Login failed."]} } 
     format.any {redirect_to :back, :notice => "Wrong Email/Password" } 
     end 
     #return render:json => {:success => false, :errors => ["Login failed."]} 
    end 

    end 

Rails & Devise: Override SessionsController是對同一主題的更多討論

+0

如何使用post route/api/authenticate驗證用戶? – dcarneiro

+0

Add route,devise_for:users do post「/ api/authenticate」=>「devise/sessions#create」end –