我正在尝试按照Railscast#360中的描述实现omniauth-facebook,并遇到了相当大的障碍.当我点击登录链接时,我得到了所需的弹出窗口,要求我输入我的facebook凭据,但是当我提交时,我得到一个OmniAuth :: Strategies :: OAuth2 :: CallbackError错误.在apache日志中,打印出来:(facebook)身份验证失败!invalid_credentials:OmniAuth :: Strategies :: OAuth2 :: CallbackError,OmniAuth :: Strategies :: OAuth2 :: CallbackError
这是相关代码:
omniauth.rb
OmniAuth.config.logger = Rails.logger
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_SECRET']
end
Run Code Online (Sandbox Code Playgroud)
sessions_controller.rb
class SessionsController < ApplicationController
def create
user = User.from_omniauth(env["omniauth.auth"])
session[:user_id] = user.id
redirect_to root_url
end
def destroy
session[:user_id] = nil
redirect_to root_url
end
end
Run Code Online (Sandbox Code Playgroud)
application.html.erb
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '(**my app id**)', // App ID
status : true, // check login …Run Code Online (Sandbox Code Playgroud) 我在试图让客户端登录工作时遇到了很多问题,所以我将冒昧地引用其他大量问题......没有一个问题导致我的答案对我有用.
CONTEXT
*工作正常,我的意思是如果你只是复制了Ryan Bates的RailsCast(http://railscasts.com/episodes/360-facebook-authentication?view=asciicast)中的代码,它可以在没有任何其他任何东西的情况下工作
TL:DR; 我传递了以下应该有效的网址...
`http://localhost:3000/auth/facebook/callback?signed_request=ASDF.JOUYOUY`
// Obviously signed_request is a much longer string
Run Code Online (Sandbox Code Playgroud)
...但我仍然得到错误 OmniAuth::Strategies::Facebook::NoAuthorizationCodeError (must pass either a代码parameter or a signed request (viasigned_request parameter or afbsr_XXXcookie)):
故障排除日期+许多其他错误/潜在解决方案的概述
下面的代码解决方案基于Ryan Bates的RailsCast的代码:
$('#sign_in').click (e) ->
e.preventDefault()
FB.login (response) ->
window.location = '/auth/facebook/callback' if response.authResponse
Run Code Online (Sandbox Code Playgroud)
障碍#1:第三方cookie被阻止了吗?
不会导致错误,只是使它无法将应用程序连接到Facebook.
首先将您的应用程序连接到Facebook需要您使用Facebook登录,因为代码FB.login (response) -> window.location = "/auth/facebook/callback" if response.authResponse取决于其有效性authResponse及其包含的signedRequest …
javascript facebook omniauth facebook-javascript-sdk omniauth-facebook
我正在使用我的RoR4应用程序,以便用户通过现有facebook帐户登录.我注册了一个Facebook应用程序(一个实时和测试版本)并存储其api和秘密development.rb.我使用omniauth-facebook和设计宝石并遇到了" Csrf detected"问题.
我的应用程序代码受到以下博客文章的启发:http: //sourcey.com/rails-4-omniauth-using-devise-with-twitter-facebook-and-linkedin/
我确实看到了2年前发布的stackoverflow帖子的解决方案(Rails + omniauth + facebook - 检测到csrf) - 但最新的omniauth-facebook版本比发布的版本大得多.无论哪种方式,我试图回到omniauth-facebook gem到版本1.4.1,我仍然遇到了这个问题.
宝石
oauth2 (1.0.0)
omniauth (1.2.2)
omniauth-facebook (2.0.1)
omniauth-oauth2 (1.3.1)
Run Code Online (Sandbox Code Playgroud)
想法?
错误日志
(facebook) Callback phase initiated.
(facebook) Callback phase initiated.
(facebook) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected
Run Code Online (Sandbox Code Playgroud)