简介: OAuth(开放授权)是一种流行的认证协议,允许用户安全地授权第三方应用程序访问其在线账户。本文将提供一个分步指南,展示如何在 Node.js 应用中实现 OAuth 认证,并以 Google 和 Facebook 为例。
实现 OAuth 认证的步骤:
1. 安装必要的包:
npm install passport passport-google-oauth20 passport-facebook
2. 配置 OAuth 客户端:
在 Google 开发者控制台和 Facebook 开发者门户中创建 OAuth 客户端,获取客户端 ID 和客户端密钥。
3. 设置 Passport.js 中间件:
const passport = require("passport");
app.use(passport.initialize());
app.use(passport.session());
4. 序列化和反序列化用户:
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
5. 配置 Google OAuth 策略:
const GoogleStrategy = require("passport-google-oauth20").Strategy;
passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: "http://localhost:3000/auth/google/callback"
},
function(accessToken, refreshToken, profile, cb) {
return cb(null, profile);
}));
6. 配置 Facebook OAuth 策略:
const FacebookStrategy = require("passport-facebook").Strategy;
passport.use(new FacebookStrategy({
clientID: process.env.FACEBOOK_CLIENT_ID,
clientSecret: process.env.FACEBOOK_CLIENT_SECRET,
callbackURL: "http://localhost:3000/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, cb) {
return cb(null, profile);
}));
7. 设置路由:
app.get("/auth/google", passport.authenticate("google", { scope: ["email", "profile"] }));
app.get("/auth/facebook", passport.authenticate("facebook", { scope: ["email"] }));
app.get("/auth/google/callback", passport.authenticate("google", { failureRedirect: "/login" }),
(req, res) => {
res.redirect("/");
}
);
app.get("/auth/facebook/callback", passport.authenticate("facebook", { failureRedirect: "/login" }),
(req, res) => {
res.redirect("/");
}
);
8. 保护路由:
app.get("/protected", ensureAuthenticated, (req, res) => {
res.send("You are authenticated.");
});
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect("/login");
}
自定义用户对象(可选):
passport.serializeUser(function(user, cb) {
cb(null, user.id);
});
passport.deserializeUser(function(id, cb) {
User.findById(id, function (err, user) {
cb(err, user);
});
});
结论:
遵循这些步骤,您可以在 Node.js 应用中轻松地实现 OAuth 认证。通过使用 Google 和 Facebook 策略,您可以轻松地允许用户使用他们的现有账户登录您的应用程序,从而提高用户体验和便捷性。