Facebook护照认证:“拒绝在一个框架中显示'url',因为它将'X-Frame-Options'设置为'DENY'。”

时间:2015-02-01 22:18:50

标签: facebook heroku express passport.js

Refused to display 'https://www.facebook.com/login.php?skip_api_login=1&api_key=XXXXX&signed_next=1&next=https%3A%2F%2Fwww.facebook.com%2Fv2.2%2Fdialog%2Foauth%3Fredirect_uri%3Dhttp%253A%252F%252FX%252Fauth%252Ffacebook%252Fcallback%26response_type%3Dcode%26client_id%XXXX%26ret%3Dlogin&cancel_uri=http%3A%2F%2FXXXX%2Fauth%2Ffacebook%2Fcallback%3Ferror%3Daccess_denied%26error_code%3D200%26error_description%3DPermissions%2Berror%26error_reason%3Duser_denied%23_%3D_&display=page' in a frame because it set 'X-Frame-Options' to 'DENY'.

我正在为我的Express应用程序添加Facebook身份验证,而且只有在我上传并在Heroku上尝试时才会收到此错误(我在localhost上没有收到此错误)。 这是我的服务器代码:

var passport = require('passport');
var FacebookStrategy = require('passport-facebook').Strategy;

passport.use(new FacebookStrategy({
 clientID: 'x',
 clientSecret: 'x',
 callbackURL: 'http://x/auth/facebook/callback'
 },
 function(accessToken, refreshToken, profile, done) {
  (DB query)        
 }
));

app.get('/auth/facebook', passport.authenticate('facebook'));
app.get('/auth/facebook/callback', 
  passport.authenticate('facebook', { successRedirect: '/',
                                      failureRedirect: '/auth/facebook' }));

然后我只是做一个简单的登录链接:

<a href="/auth/facebook/">
    <img src="facebooklogin.png" alt="Log in with Facebook">
</a>

我试图从其他人的问题中找到解决方案,但无济于事,我只是使用Passport的Facebook策略,就像他们网站上的示例一样。再次,如果我将站点URL从developers.facebook.com更改为localhost并尝试以这种方式登录,并且我允许它在帐户上后我可以使用该帐户登录同样。我究竟做错了什么?

2 个答案:

答案 0 :(得分:0)

尝试在将应用程序上传到heroku时,在开发者页面上更改您的回调网址,以及完全限定的网址,例如&#34; example.herokuapp.com/auth/facebook/callback"

答案 1 :(得分:0)

您是否尝试添加target="_top"? 我这样做了,它解决了我的问题。

见:

  

Loading Iframe Facebook (Load denied by X-Frame-Options)