0

API を介したアプリケーションへのロギングに問題があります。POST /api/v1/users/sign_in でユーザーを認証し、パスワード付きの電子メールが有効な場合はこのユーザーのオブジェクトを返します。

ルート.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"=>"my_email@example.com"}}
Completed   in 1ms
  Processing by Api::V1::SessionsController#failure as 
  Parameters: {"user"=>{"password"=>"[FILTERED]", "email"=>"my_email@example.com"}}
Rendered text template (0.0ms)

私はすでに を使用:scope => :api_v1_userしてから POST データを提供しようとしましuser_v1_apiたが、これは役に立ちませんでした。サーバーのログは、上記のものとまったく同じように見えます。

メールアドレスとパスワードは間違いなく正しいです。なぜなら、パスを/api/vi/users/sign_inから/users/sign_inすべてに変更しても問題なくログインできるからです。

4

3 に答える 3

1

問題は、ルート内のコントローラーを考案するためのセッションコントローラーを追加していないことである可能性があります。カスタムデバイスコントローラーの標準実装の場合、ルートのdevise_forステートメントで次のように実行されます。

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

APIの名前空間がわかりません。それが最善の方法かどうかはわかりませんが、試してみることができます。

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

幸運を

于 2011-08-15T01:56:30.920 に答える
0

この質問に対するこの回答が見つかりました:

devise_for :admins, :class_name => "User"

元の投稿は、Devise Google Groupにあります。これにより、最初にAPI Docsを見るべきだった場所にたどり着きました。笑

お役に立てれば!

于 2012-10-10T21:44:06.247 に答える
0

あなたの失敗メソッドは失敗と呼ばれていますか?

なんと、warden.authenticate を呼び出すときに「api/v1/sessions#failure」を「:failure」に変更してください。ログインが成功するかどうかを確認します。

于 2011-08-23T00:40:16.163 に答える