【发布时间】:2018-04-03 02:21:54
【问题描述】:
我正在尝试使用 devise 在我的应用上设置 Facebook 登录...但是我遇到了问题。
该网站将用户重定向到 Facebook,然后说:
“无法加载 URL:此 URL 的域不包含在应用的域中。要能够加载此 URL,请将应用的所有域和子域添加到应用设置中的应用域字段。
它返回到应用程序并说:
无法通过 Facebook 验证您的身份,因为“没有授权码”。
这是我的代码,用户模型:
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable, omniauth_providers: [:facebook]
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.email = auth.info.email
user.provider = auth.provider
user.uid = auth.uid
user.password = Devise.friendly_token[0,20]
end
end
end
我的设计.rb:
config.omniauth :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET'],
scope: 'email, public_profile', info_fields: 'email, first_name, last_name'
路线:
Rails.application.routes.draw do
devise_for :users, controllers: {omniauth_callbacks: 'users/omniauth_callbacks' }
authenticated :user do
root 'home#index', as: 'authenticated_root'
end
devise_scope :user do
root 'devise/sessions#new'
end
end
我的omniauth控制器:
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.from_omniauth(request.env["omniauth.auth"])
sign_in_and_redirect @user
end
end
谢谢
我将添加我正在本地主机上运行它,并且在 Facebook 的开发者部分中我在应用程序域部分添加了“http://localhost:3000/”。
【问题讨论】:
标签: ruby-on-rails ruby facebook devise