您好,在为 OAuth 使用 passport.js 时,即使我没有使用会话,我也没有使用中间件
Hi , while using passport.js for OAuth I am getting middleware not used even though I am not using sessions
我是 node.js 的新手,目前正在做我的第一个项目。
在为 OAuth 使用 passport.js 时,它给了我
Error: passport.initialize() middleware not in use
at IncomingMessage.req.login.req.logIn (C:\Users\Rohit\Documents\Projects\server\node_modules\passport\lib\http\re
quest.js:46:34)
错误,即使我现在没有使用会话。但是当我注释掉我的 'done()' 函数时,它不再显示此错误。据我所知,只有在使用会话时我才必须使用 'passport.initialize()' 。有人可以帮帮我吗!
index.js :-
const express = require('express');
const mongoose = require('mongoose');
const keys = require('./config/keys');
require('./models/User');
require('./services/passport');
const app = express();
mongoose.connect
(
keys.mongoURI,
{
useNewUrlParser : true,
useCreateIndex : true,
useUnifiedTopology : true,
}
)
.then(() => console.log('Mongoose connected ...'))
.catch(err => console.log(err));
require('./routes/authroutes')(app);
const PORT = process.env.PORT || 5000;
app.listen(PORT);
passport.js:-
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const keys = require('../config/keys');
const mongoose = require('mongoose');
const User = mongoose.model('users');
passport.use(
new GoogleStrategy
(
{
clientID : keys.googleClientID,
clientSecret : keys.googleClientSecret,
callbackURL : '/auth/google/callback'
},
(acessToken, refreshToken, profile, done) =>
{
//console.log(profile);
User.findOne({ googleID : profile.id})
.then(
(existingUser) =>
{
if(existingUser)
{
//there is already a user with this emailin our adatbase
console.log('User already exists!');
done(null, existingUser);
}
else
{
//NEW User
console.log('New User!\n');
new User({ googleID : profile.id})
.save()
.then
(
user => done(null, user)
);
}
}
);
}
)
);
谢谢!
In a Connect or Express-based application, passport.initialize()
middleware is required to initialize Passport. If your application
uses persistent login sessions, passport.session() middleware must
also be used.
http://www.passportjs.org/docs/downloads/html/
passport.initialize()
是一个中间件,您应该使用它来初始化 Passport。这是您遇到的错误。
在声明路由之前添加passport.initialize()
。
const express = require('express');
const mongoose = require('mongoose');
const passport = require('passport'); // Calling passport
const keys = require('./config/keys');
require('./models/User');
require('./services/passport'); // Calling the passport setup you've defined in passport.js
const app = express();
app.use(passport.initialize());
mongoose.connect
(
keys.mongoURI,
{
useNewUrlParser : true,
useCreateIndex : true,
useUnifiedTopology : true,
}
)
.then(() => console.log('Mongoose connected ...'))
.catch(err => console.log(err));
require('./routes/authroutes')(app);
const PORT = process.env.PORT || 5000;
app.listen(PORT);
参考:http://www.passportjs.org/docs/downloads/html/
如果您正在使用会话,则需要在 index.js 文件中如下所示指定。
app.use(passport.initialize());
app.use(passport.session());
此外,将 serializeUser
和 deserializeUser
添加到护照设置(您的 passport.js
文件)
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const keys = require('../config/keys');
const mongoose = require('mongoose');
const User = mongoose.model('users');
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
passport.use(
new GoogleStrategy
(
{
clientID : keys.googleClientID,
clientSecret : keys.googleClientSecret,
callbackURL : '/auth/google/callback'
},
(acessToken, refreshToken, profile, done) =>
{
//console.log(profile);
User.findOne({ googleID : profile.id})
.then(
(existingUser) =>
{
if(existingUser)
{
//there is already a user with this emailin our adatbase
console.log('User already exists!');
done(null, existingUser);
}
else
{
//NEW User
console.log('New User!\n');
new User({ googleID : profile.id})
.save()
.then
(
user => done(null, user)
);
}
}
);
}
)
);
根据命名约定,我建议您将 passport.js
重命名为 passport-setup.js
,因为这可能会造成混淆。另外,这是一个很好的做法。
希望这个回答对您有所帮助。
谢谢。
我是 node.js 的新手,目前正在做我的第一个项目。 在为 OAuth 使用 passport.js 时,它给了我
Error: passport.initialize() middleware not in use
at IncomingMessage.req.login.req.logIn (C:\Users\Rohit\Documents\Projects\server\node_modules\passport\lib\http\re
quest.js:46:34)
错误,即使我现在没有使用会话。但是当我注释掉我的 'done()' 函数时,它不再显示此错误。据我所知,只有在使用会话时我才必须使用 'passport.initialize()' 。有人可以帮帮我吗!
index.js :-
const express = require('express');
const mongoose = require('mongoose');
const keys = require('./config/keys');
require('./models/User');
require('./services/passport');
const app = express();
mongoose.connect
(
keys.mongoURI,
{
useNewUrlParser : true,
useCreateIndex : true,
useUnifiedTopology : true,
}
)
.then(() => console.log('Mongoose connected ...'))
.catch(err => console.log(err));
require('./routes/authroutes')(app);
const PORT = process.env.PORT || 5000;
app.listen(PORT);
passport.js:-
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const keys = require('../config/keys');
const mongoose = require('mongoose');
const User = mongoose.model('users');
passport.use(
new GoogleStrategy
(
{
clientID : keys.googleClientID,
clientSecret : keys.googleClientSecret,
callbackURL : '/auth/google/callback'
},
(acessToken, refreshToken, profile, done) =>
{
//console.log(profile);
User.findOne({ googleID : profile.id})
.then(
(existingUser) =>
{
if(existingUser)
{
//there is already a user with this emailin our adatbase
console.log('User already exists!');
done(null, existingUser);
}
else
{
//NEW User
console.log('New User!\n');
new User({ googleID : profile.id})
.save()
.then
(
user => done(null, user)
);
}
}
);
}
)
);
谢谢!
In a Connect or Express-based application, passport.initialize() middleware is required to initialize Passport. If your application uses persistent login sessions, passport.session() middleware must also be used.
http://www.passportjs.org/docs/downloads/html/
passport.initialize()
是一个中间件,您应该使用它来初始化 Passport。这是您遇到的错误。
在声明路由之前添加passport.initialize()
。
const express = require('express');
const mongoose = require('mongoose');
const passport = require('passport'); // Calling passport
const keys = require('./config/keys');
require('./models/User');
require('./services/passport'); // Calling the passport setup you've defined in passport.js
const app = express();
app.use(passport.initialize());
mongoose.connect
(
keys.mongoURI,
{
useNewUrlParser : true,
useCreateIndex : true,
useUnifiedTopology : true,
}
)
.then(() => console.log('Mongoose connected ...'))
.catch(err => console.log(err));
require('./routes/authroutes')(app);
const PORT = process.env.PORT || 5000;
app.listen(PORT);
参考:http://www.passportjs.org/docs/downloads/html/
如果您正在使用会话,则需要在 index.js 文件中如下所示指定。
app.use(passport.initialize());
app.use(passport.session());
此外,将 serializeUser
和 deserializeUser
添加到护照设置(您的 passport.js
文件)
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const keys = require('../config/keys');
const mongoose = require('mongoose');
const User = mongoose.model('users');
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
passport.use(
new GoogleStrategy
(
{
clientID : keys.googleClientID,
clientSecret : keys.googleClientSecret,
callbackURL : '/auth/google/callback'
},
(acessToken, refreshToken, profile, done) =>
{
//console.log(profile);
User.findOne({ googleID : profile.id})
.then(
(existingUser) =>
{
if(existingUser)
{
//there is already a user with this emailin our adatbase
console.log('User already exists!');
done(null, existingUser);
}
else
{
//NEW User
console.log('New User!\n');
new User({ googleID : profile.id})
.save()
.then
(
user => done(null, user)
);
}
}
);
}
)
);
根据命名约定,我建议您将 passport.js
重命名为 passport-setup.js
,因为这可能会造成混淆。另外,这是一个很好的做法。
希望这个回答对您有所帮助。
谢谢。