带有devise_token_auth的Rails Api给出了“ActiveModel :: ForbiddenAttributesError:

时间:2018-03-08 17:41:11

标签: ruby-on-rails authentication devise omniauth-facebook devise-token-auth

我想用facebook登录来构建RailsAPI,所以我选择了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-key和facebook-secret存储在env文件中。当我第一次点击localhost:3000/auth/facebook时,它将我重定向到facebook auth popup,我点击按钮然后出现错误。

enter image description here

我应该用自己的设计覆盖控制器吗?怎么做? 或者还有其他解决方案吗?

我想提一下,这是我第一次使用rails构建API。

1 个答案:

答案 0 :(得分:0)

我在重写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