Nodejs Passport实现社交网络OAuth登录
Nodejs Passport实现社交网络OAuth登录
前言:
随着社交网络的发展,开发一个应用门槛越来越低。从一个完整的应用系统,到一个部署在社交网络平台的APP;从数据库–》应用层–》展示层,变成只需要开发展示层。
很多的社交应用,甚至都放弃了用户注册!仅靠大型社交网站的登陆授权,就可以赚到100W以上的用户量。。。
减少用户管理代码开发及维护,更专注于应用本身,个人开发者已经崛起!!
文章目录:
- Passport介绍
- OAuth介绍
- Github 登陆
- LinkedIn登陆
请查看博客文章
Node.js Passport实现社交网络OAuth登录
前言:
随着社交网络的发展,开发一个应用变得越来越简单。现在,我们不再需要构建整个后端系统,只需关注前端展示层即可。通过使用社交网络的OAuth授权,可以轻松获取大量用户,而无需自己管理复杂的用户认证系统。
文章目录:
- Passport介绍
- OAuth介绍
- GitHub 登录
- LinkedIn 登录
Passport介绍
Passport 是一个灵活的身份验证中间件,适用于 Node.js 应用程序。它支持多种身份验证策略,包括本地密码、OAuth 和 OpenID 等。
OAuth介绍
OAuth(开放授权)是一种开放标准,允许用户提供一个令牌而不是用户名和密码来访问他们存储在特定服务提供者的数据。常见的社交网络如 GitHub、LinkedIn 都支持 OAuth 授权。
GitHub 登录
首先,你需要在 GitHub 上创建一个 OAuth 应用程序,并获取 clientID
和 clientSecret
。
const passport = require('passport');
const GitHubStrategy = require('passport-github').Strategy;
// 配置 Passport 使用 GitHub 战略
passport.use(new GitHubStrategy({
clientID: 'YOUR_CLIENT_ID',
clientSecret: 'YOUR_CLIENT_SECRET',
callbackURL: "http://localhost:3000/auth/github/callback"
},
function(accessToken, refreshToken, profile, cb) {
// 用户信息存储在 `profile`
return cb(null, profile);
}
));
// 初始化会话
app.use(session({ secret: 'secret' }));
app.use(passport.initialize());
app.use(passport.session());
// 路由配置
app.get('/auth/github', passport.authenticate('github'));
app.get('/auth/github/callback',
passport.authenticate('github', { failureRedirect: '/login' }),
function(req, res) {
// 成功认证后重定向
res.redirect('/');
});
// 会话序列化和反序列化
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
LinkedIn 登录
与 GitHub 类似,你需要在 LinkedIn 开发者平台上创建一个应用程序并获取 clientID
和 clientSecret
。
const passport = require('passport');
const LinkedInStrategy = require('passport-linkedin-oauth2').Strategy;
passport.use(new LinkedInStrategy({
clientID: 'YOUR_LINKEDIN_CLIENT_ID',
clientSecret: 'YOUR_LINKEDIN_CLIENT_SECRET',
callbackURL: "http://localhost:3000/auth/linkedin/callback",
scope: ['r_emailaddress', 'r_liteprofile']
},
function(accessToken, refreshToken, profile, cb) {
// 用户信息存储在 `profile`
return cb(null, profile);
}
));
// 路由配置
app.get('/auth/linkedin', passport.authenticate('linkedin'));
app.get('/auth/linkedin/callback',
passport.authenticate('linkedin', { failureRedirect: '/login' }),
function(req, res) {
// 成功认证后重定向
res.redirect('/');
});
以上代码展示了如何使用 Passport 实现 GitHub 和 LinkedIn 的 OAuth 登录。通过简单的配置,你可以快速集成社交网络的登录功能,从而减少开发和维护成本。
Node.js Passport 实现社交网络 OAuth 登录
前言:
社交网络的发展使得应用开发变得更为简单。许多应用不再需要用户注册功能,仅通过社交账号(如 GitHub、LinkedIn 等)的授权就能吸引大量用户。使用 Passport 可以简化用户认证流程,让开发者更加专注于业务逻辑。
文章目录:
- Passport 介绍
- OAuth 介绍
- GitHub 登录
- LinkedIn 登录
示例代码:
Passport 介绍:
Passport 是一个 Node.js 框架,用于处理身份验证。它支持多种策略(如本地认证、OAuth、OpenID 等)。通过使用 Passport,你可以快速集成第三方登录功能,例如 GitHub 和 LinkedIn。
OAuth 介绍:
OAuth 是一种开放标准,允许用户授权第三方应用访问其存储在服务提供商上的数据,而不需要将用户名和密码提供给第三方应用。OAuth 提供了对用户资源的安全访问。
GitHub 登录:
安装依赖包:
npm install passport passport-github2 express-session
配置 Passport:
const passport = require('passport');
const GitHubStrategy = require('passport-github2').Strategy;
passport.use(new GitHubStrategy({
clientID: 'your-github-client-id',
clientSecret: 'your-github-client-secret',
callbackURL: "http://localhost:3000/auth/github/callback"
},
function(accessToken, refreshToken, profile, cb) {
// 在这里处理用户信息
return cb(null, profile);
}
));
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
路由设置:
app.get('/auth/github',
passport.authenticate('github'));
app.get('/auth/github/callback',
passport.authenticate('github', { failureRedirect: '/login' }),
function(req, res) {
// 成功后的操作
res.redirect('/');
});
LinkedIn 登录:
安装依赖包:
npm install passport-linkedin-oauth2
配置 Passport:
const LinkedInStrategy = require('passport-linkedin-oauth2').Strategy;
passport.use(new LinkedInStrategy({
clientID: 'your-linkedin-client-id',
clientSecret: 'your-linkedin-client-secret',
callbackURL: "http://localhost:3000/auth/linkedin/callback"
},
function(accessToken, refreshToken, profile, cb) {
// 在这里处理用户信息
return cb(null, profile);
}
));
路由设置:
app.get('/auth/linkedin',
passport.authenticate('linkedin'));
app.get('/auth/linkedin/callback',
passport.authenticate('linkedin', { failureRedirect: '/login' }),
function(req, res) {
// 成功后的操作
res.redirect('/');
});
通过上述代码,你可以快速地将 GitHub 和 LinkedIn 的 OAuth 认证集成到你的 Node.js 应用中。这种方式不仅简化了用户认证流程,还能显著提高用户的使用体验。