【发布时间】:2015-03-16 22:38:48
【问题描述】:
我正在尝试使用护照(passport-facebook)身份验证中间件实现简单的 Facebook 登录集成。关于this documentation over here,我的 server.js 中有一些代码:
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/auth),请求客户端许可,然后使用一些访问令牌和客户端详细信息将用户重定向回我的页面。但是,当我运行我的服务器并尝试通过按我得到的链接来做到这一点时
passport.initialize() 中间件未使用
护照堆栈跟踪:
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 版本中已经消失。我想知道如何解决这个问题?
我的节点包是:
-passport@0.2.1
-passport-facebook@1.03
-express@4.11.1
**** U P D A T E ****
我在脚本顶部添加了以下代码,结果丢失了之前的错误消息:
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代码。无论如何,您首先需要让普通的 Web 服务器正常工作。另外,为什么要涉及另一个 Web 服务器?如果您使用的是 nodejs,它应该是您在此框中的一个 Web 服务器,除非您故意在同一主机上运行多个 Web 服务器,但在不同的端口上。 -
我已阅读您的帖子。我不明白其中的几个部分,因此我问了一堆问题(你都不想回答)。只有一个服务器进程可以侦听给定端口。如果您在 8081 端口上已经有一个 Web 服务器,则不能在同一主机上创建另一个服务器来侦听同一端口。时期。这就是 TCP 的工作原理。特定端口上的传入流量流向一个且只有一个正在侦听该端口的进程。除此之外,您还有其他问题吗?
标签: node.js authentication express passport.js passport-facebook