【发布时间】:2015-01-09 06:00:37
【问题描述】:
我正在使用 Passport 和 Angular 通过 Facebook 登录网站。代码如下:
facebookStrategy: function() {
if (!process.env.FACEBOOK_APP_ID) {
throw new Error("A Facebook App ID is required if you want to enable login via Facebook.");
}
if (!process.env.FACEBOOK_APP_SECRET) {
throw new Error("A Facebook App Secret is required if you want to enable login via Facebook.");
}
return new FacebookStrategy({
clientID: process.env.FACEBOOK_APP_ID,
clientSecret: process.env.FACEBOOK_APP_SECRET,
callbackURL: process.env.FACEBOOK_CALLBACK_URL || ("http://localhost:" + process.env.PORT + "/auth/facebook/callback")
}, function(accessToken, refreshToken, profile, done) {
var user;
user = module.exports.findOrCreateOauthUser(profile.provider, profile.id);
done(null, user);
});
}
(http://localhost? 废话,需要解决这个问题,这是我正在调整的一些示例代码)
好的,所以解决方案是(玉):
script(type="text/javascript").
if (window.location.href.indexOf('#_=_') > 0) {
window.location = window.location.href.replace(/#.*/, '');
}
这看起来不错,但这是一个不必要的重定向。所以我的完美主义者想摆脱它。文档似乎说这里需要redirect_uri,但我有callbackURL 和Passport Facebook lib seems to think they're the same。即使使用callbackURL,仍然会重定向到无意义的 URL。
具体来说,我想知道是否可以通过 Passport 而不是修复 url 的页面端 javascript 来解决这个问题。后者似乎很老套。
【问题讨论】:
-
location.replace() 比重新分配整个 url 更快,并且更改 location.hash 根本不会导航。您还可以使用 history.pushState() 更改整个 url 而无需导航。
标签: javascript node.js facebook passport.js