これは、Mongoid を ODM として使用する Rails 3.0 アプリです。以下は、デバイスがインストールされているユーザー モデルです。
class User
include Mongoid::Document
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
field :email
field :username
field :loginable_token
end
私はAPIを構築しています。そのため、認証のために、:email と :password を使用してユーザーを認証したいと考えました。GUI から、問題なく動作しています。
今、API経由で実装したいので、paramsでアクションを/api_login.json
ヒットする別のルートを作成しましたlogin
{"username"=>"kapil@gmail.com", "password"=>"sachin", "action"=>"login", "controller"=>"api/v1/accounts", "format"=>"json"}
warden.authenticate!(:scope => :user)
以前のメソッドで認証しようとするsign_in
と、次のバックトレースで失敗します。
(rdb:1) l
[3, 12] in /Users/sts-151sts-151/Dev/cloudfactory/app/controllers/api/v1/accounts_controller.rb
3 respond_with(@current_account)
4 end
5
6 def login
7 debugger
=> 8 resource = warden.authenticate!(:scope => :user)
9 sign_in(:user, resource)
10 if user == nil
11
12 respond_with(User.account.apps.first)
(rdb:1) p params
{"username"=>"kapil@gmail.com", "password"=>"sachin", "action"=>"login", "controller"=>"api/v1/accounts", "format"=>"json"}
(rdb:1) rs = warden.authenticate!(:scope => :user)
*** Unknown command: "rs = warden.authenticate!(:scope => :user)". Try "help".
(rdb:1) p rs = warden.authenticate!(:scope => :user)
1) /api/v1/lines POST send back the default app
Failure/Error: last_response.status.should eql(200)
expected 200
got 401
(compared using eql?)
# ./spec/api/v1/accounts_spec.rb:46:in `block (3 levels) in <top (required)>'
テストはデフォルトのrack-test
方法で行われます。
認証する正しい方法は何ですか?