当使用Facebook护照平常的事情被指定redirect_uri
在您使用FacebookStrategy THST,像这样的构造函数:
passport.use("facebook", new FacebookStrategy({
//TODO: Correctly configure me
clientID: "XXXXXXX"
, clientSecret: "XXXXXXXXX"
, callbackURL: "http://localhost:3007/auth/facebook/callback"
},
function(accessToken,refreshToken,profile,done) {
User.findByFacebookId(profile.id, function(err,user) {
if(err){ return done(err);}
if(!user){ return done(null,false)}
return done(null, user);
});
})
);
然后你会成立这样的路线:
app.get('/auth/facebook/login', passport.authenticate('facebook') );
app.get('/auth/facebook/login_callback', passport.authenticate('facebook', {
successRedirect:"/login_ok.html"
, failureRedirect:"/login_failed.html"
}
))
是否有可能改变的回调URL,以便它包含从参数信息传递给初始登录电话吗?
注意:这个问题是更多的保留我花了一段时间才能出来,避免别人下去相同的路径信息。
我发现用在这里找到一些信息的答案https://github.com/jaredhanson/passport-facebook/issues/2并穿过通护照的oauth2组件确定回调的URI的方式挖约护照定制的回调,并在信息的底部此页面http://passportjs.org/guide/authenticate/ 。
下面是一个映射调用一个例子/auth/facebook/login/1234
使用的回调/auth/facebook/login_callback/1234
app.get('/auth/facebook/login/:id', function(req,res,next) {
passport.authenticate(
'facebook',
{callbackURL: '/auth/facebook/login_callback/'+req.params.id }
)(req,res,next);
});
app.get('/auth/facebook/login_callback/:id', function(req,res,next) {
passport.authenticate(
'facebook',
{
callbackURL:"/auth/facebook/login_callback/"+req.params.id
, successRedirect:"/login_ok.html"
, failureRedirect:"/login_failed.html"
}
) (req,res,next);
});
@OMGPOP,在这里你可以在查询参数传递到您的callbackUrl。
var Passport = require('passport');
var FacebookStrategy = require('passport-facebook').Strategy;
const Router = require("express").Router();
var fbConfig = {
display: "popup",
clientID: "YourFbClientId",
clientSecret: "YourFbClientSecret",
callbackURL: "http://localhost:8686/auth/facebook/callback",
profileFields: ['id', 'name', 'gender', 'displayName', 'photos', 'profileUrl', 'email']
}
Passport.use(new FacebookStrategy(fbConfig,
function(accessToken, refreshToken, profile, callback) {
return callback(null, accessToken);
}
));
Router.get("/auth/facebook", function(req, res, next) {
var callbackURL = fbConfig.callbackURL + "?queryParams=" + req.query.queryParams;
Passport.authenticate("facebook", { scope : ["email"], callbackURL: callbackURL })(req, res, next);
});
Router.get("/auth/facebook/callback", function(req, res, next) {
Passport.authenticate("facebook", {
callbackURL: fbConfig.callbackURL + "?queryParams=" + req.query.queryParams,
failureRedirect: "/login",
session: false
})(req, res, next) },
function(req, res) {
console.log(req.query.queryParams);
//do whatever you want
});
看看我的博客了解更多信息: http://blog.pingzhang.io/javascript/2016/09/22/passport-facebook/
我努力做到这一点特别是与Angularjs,并希望重定向回该登录从开始同时URL。
我的解决方案是创建在Angularjs的路线,只是实现了一个位置了。 我知道这并没有具体回答这个问题,但我认为这将是任何人都希望做同样的帮助。
在服务器上:
app.get('/auth/facebook/', passport.authenticate ('facebook'));
app.get('/auth/facebook/callback', function (req, res, next) {
var authenticator = passport.authenticate ('facebook', {
successRedirect: '/fbcallback',
failureRedirect: '/'
});
delete req.session.returnTo;
authenticator (req, res, next);
})
角路由器:
when('/fbcallback', {
template: "",
controller: 'fbCtrl'
}).
角控制器:
app.controller("fbCtrl", function () {
window.history.back();
});
你也许可以做到在控制器其他一些客户端的路由以及。