У меня проблема с входом в приложение через API. Я хочу аутентифицировать пользователя через POST / api / v1 / users / sign_in и вернуть объект этого пользователя, если электронная почта с паролем верна.
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"=>"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
, все в порядке, и я вхожу в систему.