Passport是一个Node.js的认证中间件,它支持多种认证策略,包括本地认证、OAuth认证和社交登录。
OAuth认证是一种授权机制,允许第三方应用程序通过用户授权的方式访问用户在其他服务上的数据。
在Node.js中,可以使用Passport的passport-oauth2策略来实现OAuth认证。
社交登录是一种用户可以使用社交媒体账号登录第三方应用程序的方式。
在Node.js中,可以使用Passport的passport-google-oauth20或passport-facebook策略来实现社交登录。
使用Passport进行OAuth认证和社交登录的一般步骤如下:
以下是一个使用Passport进行Google OAuth认证和社交登录的示例代码:
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const FacebookStrategy = require('passport-facebook').Strategy;
// 配置Google OAuth认证策略
passport.use(new GoogleStrategy({
clientID: GOOGLE_CLIENT_ID,
clientSecret: GOOGLE_CLIENT_SECRET,
callbackURL: "http://localhost:3000/auth/google/callback"
},
function(accessToken, refreshToken, profile, done) {
User.findOrCreate({ googleId: profile.id }, function (err, user) {
return done(err, user);
});
}
));
// 配置Facebook社交登录策略
passport.use(new FacebookStrategy({
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: "http://localhost:3000/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, done) {
User.findOrCreate({ facebookId: profile.id }, function (err, user) {
return done(err, user);
});
}
));
// 初始化Passport
app.use(passport.initialize());
// 处理认证请求
app.get('/auth/google',
passport.authenticate('google', { scope: ['profile'] }));
app.get('/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/login' }),
function(req, res) {
// 认证成功后的处理
res.redirect('/');
});
app.get('/auth/facebook',
passport.authenticate('facebook'));
app.get('/auth/facebook/callback',
passport.authenticate('facebook', { failureRedirect: '/login' }),
function(req, res) {
// 认证成功后的处理
res.redirect('/');
});