4人参与 • 2025-04-24 • Node.js
在 node.js 中实现 github 登录功能,通常需要使用 oauth 2.0 协议。github 提供了 oauth 认证机制,用户可以通过 github 登录授权应用访问其数据。以下是实现 github 登录的步骤。
我们将使用 passport
中间件和 passport-github2
策略来简化 oauth 认证流程。
首先,创建一个新的 node.js 项目并安装必需的依赖:
npm init -y npm install express passport passport-github2 express-session dotenv
express
: 用于构建 web 应用。passport
: 用于认证的中间件。passport-github2
: github 的 oauth 认证策略。express-session
: 用于管理会话。dotenv
: 用于管理环境变量。在 github 上创建 oauth 应用并获取 client id
和 client secret
,步骤如下:
点击 "new oauth app" 按钮。
填写以下信息:
http://localhost:3000
)。http://localhost:3000/auth/github/callback
)。点击 register application。
你会获得 client id
和 client secret
,这些需要在代码中使用。
在项目根目录下创建一个 .env
文件,存储 github 的 client id
和 client secret
。
github_client_id=your-client-id github_client_secret=your-client-secret github_callback_url=http://localhost:3000/auth/github/callback session_secret=your-session-secret
创建 app.js
文件并编写以下代码:
const express = require('express'); const passport = require('passport'); const session = require('express-session'); const dotenv = require('dotenv'); const githubstrategy = require('passport-github2').strategy; dotenv.config(); const app = express(); const port = 3000; // 设置会话中间件 app.use(session({ secret: process.env.session_secret, resave: false, saveuninitialized: true })); // 初始化 passport app.use(passport.initialize()); app.use(passport.session()); // 配置 passport 使用 github oauth 2.0 策略 passport.use(new githubstrategy({ clientid: process.env.github_client_id, clientsecret: process.env.github_client_secret, callbackurl: process.env.github_callback_url }, function(accesstoken, refreshtoken, profile, done) { // 在此处可以将 github 用户信息存储到数据库 return done(null, profile); })); // 序列化用户到 session 中 passport.serializeuser(function(user, done) { done(null, user); }); // 反序列化用户 passport.deserializeuser(function(user, done) { done(null, user); }); // 路由:跳转到 github 登录页面 app.get('/auth/github', (req, res) => { passport.authenticate('github', { scope: ['user:email'] })(req, res); }); // 路由:github 登录回调 app.get('/auth/github/callback', (req, res) => { passport.authenticate('github', { failureredirect: '/' })(req, res, function() { res.redirect('/profile'); }); }); // 路由:用户个人资料页面 app.get('/profile', (req, res) => { if (!req.isauthenticated()) { return res.redirect('/'); } res.json(req.user); // 返回用户信息 }); // 路由:退出登录 app.get('/logout', (req, res) => { req.logout(function(err) { res.redirect('/'); }); }); // 路由:首页 app.get('/', (req, res) => { if (req.isauthenticated()) { return res.redirect('/profile'); } res.send('<a href="/auth/github" rel="external nofollow" >login with github</a>'); }); // 启动服务器 app.listen(port, () => { console.log(`server is running at http://localhost:${port}`); });
代码解释:
passport-github2
策略配置 github oauth 认证,使用 client id
和 client secret
进行认证。/auth/github
:此路由用于触发 github 登录流程,用户点击链接后,会被重定向到 github 登录页面。/auth/github/callback
:github 会回调此路由,将认证信息传递给应用。如果认证成功,用户信息将会存储在 req.user
中,并跳转到 /profile
页面。/profile
:如果用户已经登录,将显示用户的 github 个人资料。/logout
:用于用户退出登录。passport.serializeuser
和 passport.deserializeuser
:这两个方法将用户信息存储到会话中。启动 node.js 应用:
node app.js
打开浏览器,访问 http://localhost:3000
。
点击 login with github,github 将提示你授权应用。
完成授权后,你将被重定向到 /profile
页面,显示你的 github 用户信息。
你可能需要在认证失败时提供合适的反馈,可以在 passport.authenticate
中设置 failureredirect
:
app.get('/auth/github/callback', (req, res) => { passport.authenticate('github', { failureredirect: '/' })(req, res, function() { res.redirect('/profile'); }); });
如果认证失败,用户将被重定向到首页。
你可以通过 req.isauthenticated()
来检查用户是否已认证,如果没有认证,则重定向到登录页面。
app.get('/profile', (req, res) => { if (!req.isauthenticated()) { return res.redirect('/'); } res.json(req.user); // 返回用户信息 });
通过上述步骤,你已经成功地在 node.js 中实现了 github 登录。使用 passport 和 passport-github2 策略简化了 oauth 认证流程。你可以根据需要扩展功能,比如存储用户数据、处理登录状态等。
到此这篇关于使用node.js实现github登录功能的文章就介绍到这了,更多相关node.js github登录内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论