Rails Api с devise_token_auth выдает "ActiveModel::ForbiddenAttributesError:
Я хочу собрать RailsAPI с помощью входа в Facebook, поэтому я выбрал devise_token_auth
, Я следовал инструкции и бегу rails g devise_token_auth:install User auth
, мои маршруты выглядят как
routes.rb
Rails.application.routes.draw do
mount_devise_token_auth_for 'User', at: 'auth'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
Так что это материал, который исходит от генератора. Я зарегистрировал свое приложение на Facebook для разработчиков, храню Facebook-ключ и Facebook-секрет в файле env. Когда я ударил в первый раз localhost:3000/auth/facebook
он перенаправляет меня на Facebook auth popup, я нажимаю кнопку и затем появляется ошибка.
Должен ли я переопределить контроллер из устройства своим собственным? Как это сделать? Или есть какие-то другие решения?
Я хотел бы отметить, что это мой первый раз, когда я строил API с помощью рельсов.
1 ответ
Я решил проблему, когда переписать assign_provider_attrs
route.rb
mount_devise_token_auth_for 'User', at: 'auth' , controllers: {
omniauth_callbacks: 'authentication_rails/omniauth_callbacks'
}
Контроллеры / проблемы /authentication_rails/omniauth_callbacks_controller
module AuthenticationRails
class OmniauthCallbacksController < DeviseTokenAuth::OmniauthCallbacksController
protected
# break out provider attribute assignment for easy method extension
def assign_provider_attrs(user, auth_hash)
if auth_hash['provider'] == 'facebook'
user.assign_attributes({
nickname: auth_hash['info']['nickname'],
name: auth_hash['info']['name'],
image: auth_hash['info']['image'],
email: auth_hash['info']['email']
})
else
super
end
end
end
end