【问题标题】:Rails Api with devise_token_auth gives "ActiveModel::ForbiddenAttributesError:带有 devise_token_auth 的 Rails Api 给出“ActiveModel::ForbiddenAttributesError:
【发布时间】:2018-08-17 04:05:26
【问题描述】:

我想用 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 弹出窗口,我点击了按钮,然后错误来了。

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

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

【问题讨论】:

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


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多