2011-07-12 49 views
0

我有通過API登錄到我的應用程序的問題。我想通過POST/api/v1/users/sign_in來認證用戶,並在密碼有效的電子郵件中返回此用戶的對象。設計命名空間內的路由助手 - warden.authenticate的問題!

的routes.rb

devise_for :users 
... 
namespace :api do 
    namespace :v1 do 
    devise_scope :user do 
     post 'users' => 'registrations#create', :as => 'user_registration' 
     post 'users/sign_in' => 'sessions#create', :as => 'user_session' 
    end 
    end 
end 

控制器/ API/V1/sessions_controller.rb

class Api::V1::SessionsController < Devise::SessionsController 
    def create 
    resource = warden.authenticate!(:scope => resource_name, :recall => 'api/v1/sessions#failure') 
    render :json => resource 
    end 

    def failure 
    render :text => 'not good', :status => 401 
    end 
end 

問題是,用戶永遠不會認證。它甚至沒有從數據庫中選擇。這是我的本地服務器日誌:

Started POST "/api/v1/users/sign_in" for 127.0.0.1 at Tue Jul 12 11:46:55 +0200 2011 
    SQL (0.6ms) SHOW TABLES 
    Processing by Api::V1::SessionsController#create as 
    Parameters: {"user"=>{"password"=>"[FILTERED]", "email"=>"[email protected]"}} 
Completed in 1ms 
    Processing by Api::V1::SessionsController#failure as 
    Parameters: {"user"=>{"password"=>"[FILTERED]", "email"=>"[email protected]"}} 
Rendered text template (0.0ms) 

我已經嘗試使用:scope => :api_v1_user,然後給POST數據爲user_v1_api,但這並沒有幫助。 Sever日誌看起來和上面的這個完全一樣。

電子郵件和密碼是絕對正確的,因爲當我改變從/api/vi/users/sign_in/users/sign_in一切路徑是確定的,我登錄。

回答

1

的問題可能是你還沒有加入您的會話控制器設計控制器在路線中。對於標準實施定製設計的控制器是在devise_for語句來完成的路線爲:

devise_for :users, :controllers => { :sessions => "user/sessions" } 

我不知道的一個命名空間爲您的API。我不知道這是否是做的最好的方法,但也許你可以試試:

devise_for :users, :controllers => { :sessions => "api/v1/user/sessions" } 

好運

0

是您的故障方法曾經被稱爲是一個失敗?

對於這個問題,當你調用warden.authenticate時,將'api/v1/sessions#failure'更改爲':failure'!並查看登錄是否成功。

0

找到這個答案這個問題:

devise_for :admins, :class_name => "User" 

原帖是在此間舉行的Devise Google Group。這導致我前往API Docs的地方。大聲笑

希望這會有所幫助!