我试图实现一个简单的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的内容,但是这些都在快递4.x版本中消失了。我在想我怎么才能解决这个问题?
我的节点包是:
-passport@0.2.1 -护照-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)解决:
乌里斯的问题。
发布于 2016-09-09 16:39:04
试着在你的
app.get('/web-apps/facebook-passport/auth/facebook', passport.authenticate('facebook-signup', { session: false }));而不是
app.get('/web-apps/facebook-passport/auth/facebook', passport.authenticate('facebook'));我认为问题在于facebook为您记录了一个返回的令牌,如果您不关闭会话,facebook正在等待相同的令牌。使用{ session : false}会在身份验证完成后导致facebook关闭会话。每次进行身份验证时,您都将收到一个新令牌。
我以前也遇到过这样的问题,我不是专家,也是这样解决的。
https://stackoverflow.com/questions/28015906
复制相似问题