Не могу понять, как обновить пользователей с помощью гема devise_token_auth - PullRequest
0 голосов
/ 26 декабря 2018

Я работаю над API-интерфейсом rails, который предназначен для работы с внешним интерфейсом VUE.Я впервые работаю с rails только как API.

Я знаком с использованием devise для аутентификации пользователей в других приложениях rails.

Наш вход работает так же, как и при выходе из системы.Я не могу понять, как редактировать и удалять пользователей.

Мои рейк-маршруты показывают это:

        new_api_user_session GET      /api/v1/auth/sign_in(.:format)                            devise_token_auth/sessions#new
            api_user_session POST     /api/v1/auth/sign_in(.:format)                            devise_token_auth/sessions#create
    destroy_api_user_session DELETE   /api/v1/auth/sign_out(.:format)                           devise_token_auth/sessions#destroy
       new_api_user_password GET      /api/v1/auth/password/new(.:format)                       devise_token_auth/passwords#new
      edit_api_user_password GET      /api/v1/auth/password/edit(.:format)                      devise_token_auth/passwords#edit
           api_user_password PATCH    /api/v1/auth/password(.:format)                           devise_token_auth/passwords#update
cancel_api_user_registration GET      /api/v1/auth/cancel(.:format)                             devise_token_auth/registrations#cancel
   new_api_user_registration GET      /api/v1/auth/sign_up(.:format)                            devise_token_auth/registrations#new
  edit_api_user_registration GET      /api/v1/auth/edit(.:format)                               devise_token_auth/registrations#edit
       api_user_registration PATCH    /api/v1/auth(.:format)                                    devise_token_auth/registrations#update

Мой route.rb выглядит так:

Rails.application.routes.draw do

  root 'home#index'

  namespace :api do
    scope :v1 do
      resource :profile, only: [:show]
      mount_devise_token_auth_for "User", at: 'auth'

     ## other code
    end
  end

end

Я тестирую API, используя CURL.Следующая команда может успешно войти в систему:

curl -X POST -v -H 'Content-Type: application/json' http://localhost:3000/api/v1/auth/sign_in -d '{"email": "test@example.com", "password": "password"}'

Это работает нормально.

Маршрут для обновления пользователя должен быть http://localhost:3000/api/v1/auth/

Вход в систему дает мнезначения клиента и токена доступа.Когда я вставляю их в следующую команду curl, я ожидаю, что пользователь обновится.Атрибут, который я пытаюсь обновить, это «sortOrder».

curl -X PATCH -v -H 'Content-Type: application/json' -H 'access-token: XUbhcAgWlVnARf9Ps4rjR' -H 'client: Lxg5us7MpUyAuM5xQGNuqg'  -H 'uid: test@example.com' http://localhost:3000/api/v1/auth/ -d '{"sortOrder": "DESC"}'

Из этой команды мой журнал рельсов показывает:

Started PATCH "/api/v1/auth/" for 127.0.0.1 at 2018-12-26 12:10:53 -0800
Processing by DeviseTokenAuth::RegistrationsController#update as */*
  Parameters: {"sortOrder"=>"DESC", "registration"=>{"sortOrder"=>"DESC"}}
  User Load (0.6ms)  SELECT  `users`.* FROM `users` WHERE `users`.`uid` = 'test@example.com' LIMIT 1
Unpermitted parameter: registration
Completed 404 Not Found in 101ms (Views: 0.3ms | ActiveRecord: 0.6ms)

Вывод команды curl:

*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 3000 (#0)
> PATCH /api/v1/auth/ HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Type: application/json
> access-token: XUbhcAgWlVnARf9Ps4rjR
> client: Lxg5us7MpUyAuM5xQGNuqg
> uid: test@example.com
> Content-Length: 50
> 
* upload completely sent off: 50 out of 50 bytes
< HTTP/1.1 404 Not Found
< X-Frame-Options: SAMEORIGIN
< X-XSS-Protection: 1; mode=block
< X-Content-Type-Options: nosniff
< Content-Type: application/json; charset=utf-8
< Cache-Control: no-cache
< X-Request-Id: 1e5e61f6-1226-43dc-b8b3-30a576b0c03a
< X-Runtime: 0.104965
< Vary: Origin
< Transfer-Encoding: chunked
< 
* Connection #0 to host localhost left intact
{"success":false,"errors":["User not found."],"status":"error"}

Я не уверен, что мне здесь не хватает.С этой настройкой устройства у меня нет доступа к контроллеру устройства / регистрации.Я мог бы создать свой собственный, но это должно сработать.Мне не удалось найти документацию для гема devise_token_auth, который касается обновлений и удалений пользователей.

Полученный результат выглядит как "пользователь не найден".Я пробовал несколько способов получить пользовательский UID, адрес электронной почты и идентификатор в запросе, но, похоже, ничего не работает.Кто-нибудь испытывал это раньше?

1 Ответ

0 голосов
/ 18 апреля 2019

Похоже, что пользователь не спасается как-то.Я бы попробовал добавить :create к resource :profile, only: [:show, :create] в rout.rb.Я только изучаю RoR и Devise, поэтому не могу сказать, что это 100% лекарство, но стоит попробовать.Следуя той же логике, вы можете добавить действия :edit и :destroy для редактирования / удаления профиля / пользователя.

...