首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >身份验证失败: Devise + OmniAuth + Facebook

身份验证失败: Devise + OmniAuth + Facebook
EN

Stack Overflow用户
提问于 2014-02-13 05:10:44
回答 1查看 1.9K关注 0票数 1

我得到(脸书)认证失败!错误--无所不在:(facebook)身份验证失败!csrf_detected: OmniAuth::策略:OAuth2::CallbackError,csrf_detected \ CSRF检测到Members::OmniauthCallbacksController#failure作为HTML的处理

这是我的应用程序代码

控制器

代码语言:javascript
运行
复制
class Members::OmniauthCallbacksController < Devise::OmniauthCallbacksController   
    def facebook     
        @user = Member.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)      
        if @user.persisted?       
            sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
            set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
        else
             session["devise.facebook_data"] = request.env["omniauth.auth"]
            redirect_to new_user_registration_url
        end
    end
end

模型

代码语言:javascript
运行
复制
class Member < ActiveRecord::Base
  devise :omniauthable, :database_authenticatable, :confirmable, :registerable, :recoverable, :rememberable, :trackable, :validatable
  validates :lastName, :presence => true
  def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
    user = Member.where(:provider => auth.provider, :uid => auth.uid).first
    if user
      return user
    else
      registered_user = Member.where(:email => auth.info.email).first
      if registered_user
        return registered_user
      else
        user = Member.create(name:auth.extra.raw_info.name,
                            provider:auth.provider,
                            uid:auth.uid,
                            email:auth.info.email,
                            password:Devise.friendly_token[0,20],
                          )
      end    end
  end

end

路线

代码语言:javascript
运行
复制
TestDevice::Application.routes.draw do
  devise_for :members, :controllers => { :omniauth_callbacks => "members/omniauth_callbacks", :sessions => "members/sessions", :passwords => "members/passwords", :registrations => "members/registrations" }
  root "home#index"

  get "boot/new"
  get "boot/show"

  devise_scope :members do

  end

结束

布局

代码语言:javascript
运行
复制
-if member_signed_in?
    %h3.text-center.page-header
        You have succesfully signed in
        =link_to "Sign Out", destroy_member_session_path, :method => :delete, :class => "btn btn-primary"
-else
    %h1.text-center.page-header
        Welcome to rails community
    %div.text-center
        =link_to "Sign In", new_member_session_path, :method => :get, :class => "btn btn-primary"
        |
        =link_to "Sign up", new_member_registration_path, :method => :get, :class => "btn btn-primary"
        |
        =link_to "Sign in with Facebook", member_omniauth_callback_path(:facebook), :class => "btn btn-primary"\

devise.rb文件

代码语言:javascript
运行
复制
   require "omniauth-facebook"
  config.omniauth :facebook, "**********", "****************"

控制台看起来就像

代码语言:javascript
运行
复制
Started GET "/members/auth/facebook/callback" for 127.0.0.1 at 2014-02-13 09:53:12 +0500
I, [2014-02-13T09:53:12.166717 #74319]  INFO -- omniauth: (facebook) Callback phase initiated.
E, [2014-02-13T09:53:12.168392 #74319] ERROR -- omniauth: (facebook) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected
Processing by Members::OmniauthCallbacksController#failure as HTML
Redirected to http://localhost:3000/members/sign_in
Completed 302 Found in 2ms (ActiveRecord: 0.0ms)

我不明白这是甚麽意思?我只有config/initializers/devise.rb文件,而不是这个文件config/initializes.rb。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-03 01:36:27

你必须确保facebook的应用程序被设置为公众视野。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21745759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档