Tôi đang cố gắng tích hợp hộ chiếu vào máy chủ nodejs của tôi bằng cách sử dụng kết nối, nhưng dường như không thể làm điều đó đúng cách. Tất cả các hướng dẫn/ví dụ sử dụng expressJS, vì vậy tôi đã cố gắng hết sức để định dạng lại mã để làm việc với mã của mình, nhưng tôi dường như không thể làm cho nó hoạt động được. Các phần liên quan được viết dưới đây. Có ai có lời khuyên nào về những gì có thể là vấn đề? passport.authenticate() không bao giờ có vẻ được gọi (ít nhất là thông điệp console.log trong cuộc gọi xác thực facebook không bao giờ in). Tôi hiện đang không lưu bất cứ thứ gì vào cơ sở dữ liệu, do đó, vấn đề hy vọng sẽ là một cái gì đó thực sự đơn giản mà tôi chỉ thiếu.Sử dụng PassportJS với Kết nối cho NodeJS để xác thực Người dùng Facebook
Điều duy nhất mà nói đến cái tâm là tiềm năng gọi lại tôi có cho facebook, đó là một url localhost (kể từ khi tôi vẫn đang phát triển này tại địa phương). Tôi đã có thể xác thực với facebook tốt bằng cách sử dụng everyauth (từ một trường hợp hoàn toàn địa phương), nhưng chuyển sang passportJS kể từ khi tôi đã có vấn đề khác nhau có hộ chiếuJS dường như địa chỉ.
passport = require('passport');
fpass = require('passport-facebook').Strategy;
passport.serializeUser(function(user,done){
done(null, user);
});
passport.deserializeUser(function(obj,done){
done(null,obj);
});
passport.use(new fpass({
clientID:'facebook app id',
clientSecret:'facebook app secret',
callbackURL:'http://localhost:3000/auth/facebook/callback'
},
function(accessToken, refreshToken, fbUserData, done){
console.log('got here');
return done(null,fbUserData);
}
));
function checkLoggedIn(req, res, next){
console.log("req.user: " + req.user);
if(req.user)
next();
else{
console.log('\nNot LOGGED IN\n');
if(req.socket.remoteAddress || req.socket.socket.remoteAddress == '127.0.0.1'){
var folder,contentType;
console.log('req url = '+req.url);
if(req.url == '/'){
folder = __dirname + '/landingPage.html';
contentType = 'text/html';
}
else if(req.url == '/auth/facebook'){
passport.authenticate('facebook');
return;
}
else if(req.url == '/auth/facebook/callback'){
passport.authenticate('facebook', {failureRedirect: '/failbook', successRedirect:'/'});
return;
}
if(folder){
console.log('got to folder part\n\n');
fs.readFile(folder, function(error, content){
if(error){
res.writeHead(500);
res.end();
}
else{
res.writeHead(200, {'Content-Type': contentType});
res.end(content);
}
});
}
else{ res.writeHead(500); res.end();}
}
else {res.writeHead(500); res.end();}
}
}
connect.createServer(
connect.cookieParser(),
connect.bodyParser(),
connect.session({secret:'wakajakamadaka'}),
passport.initialize(),
passport.session(),
checkLoggedIn).listen(8888);
console.log('Server has started.');
}
Có ai có lời khuyên nào hay nhìn thấy sự cố trong những gì tôi đang làm không? Hai lựa chọn thay thế khác của tôi đang chuyển trở lại everyauth và tìm ra những gì đang diễn ra ở đó, hoặc chuyển sang ExpressJS, nhưng tôi không muốn đi với một trong các tùy chọn đó.
nhất,
Sami
hmm Tôi đang đi xa hơn tôi trước đây, nhưng nó vẫn chưa hoạt động. bây giờ tôi đang đăng ký cuộc gọi lại từ facebook. Tôi đang kiểm tra '/ auth/facebook/callback' đối với req.url.split ('?') [0] ngay bây giờ để cuộc gọi lại sẽ đăng ký. thêm một (req, res, next) sau khi cuộc gọi hàm gây ra một vòng lặp chuyển hướng vô hạn. bất kỳ ý tưởng? – thisissami
Tôi nghĩ bạn sẽ cần sử dụng phần mềm trung gian 'connect.query()' trong thiết lập phần mềm trung gian 'createServer' của bạn. Hộ chiếu dự kiến 'req.query' sẽ được phổ biến trong nhiều trường hợp, bao gồm cả việc nhận mã ủy quyền trong cuộc gọi lại trên Facebook. –
hầu như ở đó ... với một '(req, res, next)' được thêm vào cuối cuộc gọi xác thực gọi lại, chức năng phản hồi facebook được truy cập với dữ liệu facebook thích hợp. Tuy nhiên, tôi nhận được một 'TypeError: Object # không có phương thức 'redirect''. Dòng mã vi phạm là 'return res.redirect (options.successRedirect);' trên dòng 97 của authenticate.js. Vấn đề là gì vậy? –
thisissami