我正在尝试使用护照(passport-facebook)身份验证中间件实现简单的 Facebook 登录集成。关于此处的此文档,我的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
**** 更新 ****
我已将以下代码添加到我的脚本顶部,结果丢失了先前的错误消息:
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 的问题。