我想用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,我点击按钮然后出现错误。
我应该用自己的设计覆盖控制器吗?怎么做? 或者还有其他解决方案吗?
我想提一下,这是我第一次使用rails构建API。
答案 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