当我尝试使用passport进行身份验证时,我得到了以下错误。我想知道我是不是遗漏了一些中间件什么的。无论如何,这在目前是行不通的。我在后端收到以下错误:]{消息:‘你应该提供access_token’}错误ERR_HTTP_HEADERS_SENT:发送到客户端后无法设置标头
App.js:29 POST http://127.0.0.1:3000/api/users/auth/facebook 401 (未经授权)
我已经确保访问令牌打印在前端:这是令牌blob {"access_token":"EAAGTZAFMSr8YBACcmZAaEaEMTbCKICwJqiohySMxb1pPrJaaECiPqfOqiPFln4hp2pucvSm9Pr42twDQVZBt4KZAIoEENaAINHVBcfZB8YdRM23Y9VjDSeSnUtOsyynufjCBdQyNozpI2N4bTJotZAEmLETjIqLZBxwP9VxBdDFZAYWMofEiZCUDrQwGk7fBahs8SEtzTB80kfAZDZD"}这里是前端
facebookResponse = (response) => {
const token= JSON.stringify({access_token: response.accessToken}, {type : 'application/json'});
console.log('this is ther token blob', token);
const options = {
method: 'POST',
body: token,
mode: 'cors',
cache: 'default'
};
fetch('api/users/auth/facebook', options).then(r => {
const token = r.headers.get('x-auth-token');
if(token){
try {
r.json().then(user => {
if (token) {
this.setState({isAuthenticated: true, user, token})
}
});
} catch{
console.log('error');
}
}
})
};这是后端
var express = require('express');
var router = express.Router();
var { generateToken, sendToken } = require('./token.utils');
var passport = require('passport');
var config = require('./config');
var request = require('request');
require('../../passport')();
router.use(passport.initialize());
router.use(passport.session());
router.post('/auth/facebook',
function(req, res, next){
passport.authenticate('facebook-token', function(error, user, info){
console.log(error);
console.log(user);
console.log(info);
if (error) {
res.status(401).send(error);
} else if (!user) {
res.status(401).send(info);
} else {
next();
}
res.status(401).send(info);
})(req, res);
});
module.exports = router;以下是我使用facebook登录的jwt策略:
require('./mongoose')();
var passport = require('passport');
var User = require('mongoose').model('User');
var FacebookTokenStrategy = require('passport-facebook-token');
module.exports = function () {
passport.use(new FacebookTokenStrategy({
clientID: '443534076456---',
clientSecret: 'd9c12cd1c8c7fcea7abb391a0bbb---'
},
function (accessToken, refreshToken, profile, done) {
User.upsertFbUser(accessToken, refreshToken, profile, function(err, user) {
return done(err, user);
});
}));
};下面是主服务器文件:
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const passport = require('passport');
const path = require('path');
const users = require('./routes/api/users');
const cors = require('cors');
const app = express();
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
var corsOption = {
origin: true,
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
credentials: true,
exposedHeaders: ['x-auth-token']
};
app.use(cors());
// const db = require('./config/keys').mongoURI;
// mongoose.connect("mongodb://user1:Voodoo12@ds263146.mlab.com:63146/fb-login-chat").then(()=> console.log('MongoDb Connected'))
// .catch(err=> console.log(err));
app.use(express.static(path.join(__dirname, 'public')));
app.use(passport.initialize());
app.use(passport.session());
app.use('/api/users', users);
//serve static assets if in production
// if(process.env.NODE_ENV === 'production'){
// //Set a static folder
// app.use(express.static('client/build'))
// app.get('*', (req, res)=>{
// res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
// });
// }
const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Server running on port ${port}`));发布于 2019-06-17 04:29:35
我认为您的API无法解码有效负载并提取访问令牌
尝试在请求的选项中添加标头
const options = {
method: 'POST',
body: token,
mode: 'cors',
cache: 'default',
// add headers
headers: { 'Content-type': 'application/json' }
};致以敬意,MA
https://stackoverflow.com/questions/56368962
复制相似问题