Я пытаюсь внедрить простую интеграцию с Facebook, используя паспорт (pass-facebook). Касательно this documentation over here я некоторый код здесь из моих server.js:Node.js/authentication-аутентификация Facebook
var express = require('express'),
passport = require('passport'),
FacebookStrategy = require('passport-facebook').Strategy,
app = express();
// Facebook authentication:
passport.use(
new FacebookStrategy({
clientID: "fb client id here",
clientSecret: "fb client secret key here",
callbackURL: "http://localhost/web-apps/facebook-passport/auth/facebook/"
},
function(accessToken, refreshToken, profile, done) {
console.log("auth is done!");
done(null, profile);
})
);
app.get('/web-apps/facebook-passport/auth/facebook', passport.authenticate('facebook'));
app.get(
'/web-apps/facebook-passport/auth/facebook/',
passport.authenticate('facebook', {
successRedirect: '/',
failureRedirect: '/login'
})
);
app.get('/web-apps/facebook-passport/', function(req, res) {
res.send('<a href="/web-apps/facebook-passport/auth/facebook">Login with Facebook</a>');
});
app.listen(80);
Код в основном обеспечивает связь, которая должна привести к проверке подлинности Facebook (/ facebook/авт), попросите клиента для разрешения, а затем перенаправлять пользователь возвращается на мою страницу с некоторыми токенами доступа и сведениями клиента. Однако, когда я бегу мой сервер и попытаться сделать это, нажав на ссылку я получил
passport.initialize() промежуточное программное обеспечение не используется
Паспорт StackTrace:
Error: passport.initialize() middleware not in use
at IncomingMessage.req.login.req.logIn (C:\xampp\htdocs\web-apps\facebook-passport\node_modules\passport\lib\http\request.js:44:34)
at Strategy.strategy.success (C:\xampp\htdocs\web-apps\facebook-passport\node_modules\passport\lib\middleware\authenticate.js:228:13)
at verified (C:\xampp\htdocs\web-apps\facebook-passport\node_modules\passport-facebook\node_modules\passport-oauth2\lib\strategy.js:179:18)
at Strategy.app.get.passport.authenticate.successRedirect [as _verify] (C:\xampp\htdocs\web-apps\facebook-passport\server.js:22:3)
at C:\xampp\htdocs\web-apps\facebook-passport\node_modules\passport-facebook\node_modules\passport-oauth2\lib\strategy.js:195:22
at C:\xampp\htdocs\web-apps\facebook-passport\node_modules\passport-facebook\lib\strategy.js:183:5
at passBackControl (C:\xampp\htdocs\web-apps\facebook-passport\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:126:9)
at IncomingMessage.<anonymous> (C:\xampp\htdocs\web-apps\facebook-passport\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:143:7)
at IncomingMessage.emit (events.js:117:20)
at _stream_readable.js:944:16
Я думаю, мне нужно добавить что-то вроде app.configuration
к моему серверному скрипту, но они ушли в Express 4.x. Мне интересно, как я могу это исправить?
Мой узел пакеты:
*** * UPDATE ****
Я добавил следующий код в начало моего scri пт, который был результат потери предыдущего сообщения об ошибке:
app.use(bodyParser());
// Use the passport package in our application
app.use(passport.initialize());
// Create our Express router
var router = express.Router();
Однако, я получил эту новую ошибку говоря
Этого код авторизации используется.
Это трассировки стека:
FacebookTokenError: This authorization code has been used.
at Strategy.parseErrorResponse (C:\xampp\htdocs\web-apps\facebook-passport\node_modules\passport-facebook\lib\strategy.js:198:12)
at Strategy.OAuth2Strategy._createOAuthError (C:\xampp\htdocs\web-apps\facebook-passport\node_modules\passport-facebook\node_modules\passport-oauth2\lib\strategy.js:345:16)
at C:\xampp\htdocs\web-apps\facebook-passport\node_modules\passport-facebook\node_modules\passport-oauth2\lib\strategy.js:171:43
at C:\xampp\htdocs\web-apps\facebook-passport\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:177:18
at passBackControl (C:\xampp\htdocs\web-apps\facebook-passport\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:124:9)
at IncomingMessage.<anonymous> (C:\xampp\htdocs\web-apps\facebook-passport\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:143:7)
at IncomingMessage.emit (events.js:117:20)
at _stream_readable.js:944:16
at process._tickCallback (node.js:442:13)
Решено:
Проблемы с URI.
Таким образом, вы не можете использовать порт, который уже используется на вашем сервере. Итак, когда вы выбираете другой порт, который не дает ошибку «EADDRINUSE», вы затем помещаете этот новый порт в URL-адрес, который вы пытаетесь? Кроме того, я не знаю, почему вы упоминаете 'socket.io', так как я не вижу никакого кода' socket.io' где угодно. В любом случае вам нужно запустить обычный веб-сервер. Кроме того, почему существует другой веб-сервер? Если вы используете nodejs, это должен быть ваш ОДИН веб-сервер в этом поле, если вы намеренно не работаете с несколькими веб-серверами на одном и том же хосте, а на разных портах. – jfriend00
Я прочитал ваше сообщение. Я не понимаю нескольких его частей, поэтому я задал несколько вопросов (ни один из которых вы не ответили). Только один серверный процесс может прослушивать данный порт. Если у вас уже есть веб-сервер на порту 8081, вы не можете сделать другой сервер на том же хосте, который прослушивает один и тот же порт. Период. Вот как работает TCP. Входящий трафик на конкретном порту переходит к одному и только одному процессу, который прослушивает этот порт. Есть ли еще вопрос к этому? – jfriend00