Как обновить пользователя без токена при использовании авторизации токена Devise?

Как часть моего приложения, когда я отправляю приглашение другим пользователям, мне нужно установить кучу параметров для вновь созданного пользователя, прежде чем они даже войдут в приложение. Итак, прежде чем переключиться на DeviseTokenAuth (и rails api), я использовал devise, и это позволило мне вносить пользовательские изменения из серверной части. Например, если я иду в консоль и делаю user.save, он возвращает true.

Теперь, после перехода на DeviseTokenAuth, мне пришлось ввести следующее в файле проблем в модели пользователя:

include DeviseTokenAuth::Concerns::User

Как только я включил это, я не могу вносить изменения в пользователя из бэкэнда (например, консоль rails> user.save возвращает false). Я предполагаю, что для этого требуется токен каждый раз, когда пользователь обновляется? Как я могу пропустить это для определенных действий контроллера, где, например, мне нужно будет обновить пользователя без фактического вызова пользователем/клиентом действия. (отправка токена)


person Venomoustoad    schedule 23.07.2019    source источник
comment
не могли бы вы подтвердить, возвращает ли save false из-за отсутствующего токена? попробуйте это user.save!, чтобы увидеть ошибки проверки   -  person Sikandar Tariq    schedule 23.07.2019
comment
Привет Спасибо за ответ. Наконец-то я разобрался. Проблема в том, что DeviseTokenAuth не позволяет обновлять модель пользователя, если для объекта User не задан uid. Сначала мне пришлось вручную установить объект в моем контроллере.   -  person Venomoustoad    schedule 23.07.2019


Ответы (1)


На случай, если кто-то еще столкнется с этой проблемой: я провел несколько часов, стреляя в темноте, чтобы наконец понять, что поле uid для объекта User должно быть заполнено DeviseTokenAuth. Если нет, пользователь не будет обновляться. т. е. user.save вернет false

В моем случае я отправлял приглашение, используя devise_invitable, который в настоящее время находится за пределами значений по умолчанию DeviseTokenAuth. Итак, когда вы создаете нового пользователя, используя метод приглашения Devise_invitable gem, поля UID, provider не устанавливаются автоматически. Мне просто нужно было добавить 2 строки кода приглашения:

u= User.invite!(params[:email])
u.uid=params[:email] #added
u.provider='email' #added
u.save #added

Теперь пользовательский объект работает нормально, он не имеет ничего общего с самим токеном, поэтому мое предыдущее предположение, изложенное в вопросе, было вздором.

person Venomoustoad    schedule 23.07.2019