it编程 > 前端脚本 > Node.js

使用Node.js实现GitHub登录功能

4人参与 2025-04-24 Node.js

在 node.js 中实现 github 登录功能,通常需要使用 oauth 2.0 协议。github 提供了 oauth 认证机制,用户可以通过 github 登录授权应用访问其数据。以下是实现 github 登录的步骤。

我们将使用 passport 中间件和 passport-github2 策略来简化 oauth 认证流程。

1. 安装所需的 npm 包

首先,创建一个新的 node.js 项目并安装必需的依赖:

npm init -y
npm install express passport passport-github2 express-session dotenv

2. 配置 github oauth 应用

在 github 上创建 oauth 应用并获取 client idclient secret,步骤如下:

你会获得 client idclient secret,这些需要在代码中使用。

3. 配置 .env 文件

在项目根目录下创建一个 .env 文件,存储 github 的 client idclient 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

4. 创建 app.js 文件并实现 oauth 登录

创建 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}`);
});

代码解释:

5. 启动应用并测试

启动 node.js 应用:

node app.js

打开浏览器,访问 http://localhost:3000

点击 login with github,github 将提示你授权应用。

完成授权后,你将被重定向到 /profile 页面,显示你的 github 用户信息。

6. 处理认证失败和错误(可选)

你可能需要在认证失败时提供合适的反馈,可以在 passport.authenticate 中设置 failureredirect

app.get('/auth/github/callback', (req, res) => {
    passport.authenticate('github', { failureredirect: '/' })(req, res, function() {
        res.redirect('/profile');
    });
});

如果认证失败,用户将被重定向到首页。

7. 保护路由(可选)

你可以通过 req.isauthenticated() 来检查用户是否已认证,如果没有认证,则重定向到登录页面。

app.get('/profile', (req, res) => {
    if (!req.isauthenticated()) {
        return res.redirect('/');
    }
    res.json(req.user);  // 返回用户信息
});

总结

通过上述步骤,你已经成功地在 node.js 中实现了 github 登录。使用 passportpassport-github2 策略简化了 oauth 认证流程。你可以根据需要扩展功能,比如存储用户数据、处理登录状态等。

到此这篇关于使用node.js实现github登录功能的文章就介绍到这了,更多相关node.js github登录内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

nvm安装指定版本node失败的解决方法

04-24

Node.js进行文件读取与复制的系统总结

04-24

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

04-24

Node.js net模块详解(含类、方法、事件)

04-24

使用Node.js获取电脑配置信息的实现方法(CPU型号、内存大小、磁盘类型等)

04-24

使用Node.js制作图片上传服务的详细教程

04-24

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论